[英]How do I convert sparse data frame into numeric values?
我有一个包含六列的数据框,保存为 csv 文件。 其中两列非常稀疏,包括很多空白(我想成为 NA)。 一个稀疏的列, flops
也有非常广泛的值(低至 500,高至 93000000000000000)。
我从这里和这里尝试了各种解决方案,但都没有运气。 出于某种原因,仅保留了 500 个数据点。
例如:
> DATA$flops2 <- as.numeric(levels(DATA$flops))
Error in `$<-.data.frame`(`*tmp*`, flops2, value = c(NA, NA, NA, NA, NA, :
replacement has 14 rows, data has 79
In addition: Warning message:
NAs introduced by coercion
> is.numeric(flops2)
[1] TRUE
> flops2
[1] NA NA NA NA NA NA NA 500 NA NA NA NA NA NA NA NA NA NA NA NA
[21] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[41] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[61] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> flops
[1]
[4]
[7] 500
[10]
[13]
[16]
[19]
[22]
[25] 3,000,000
[28] 5,000,000
[31]
[34]
[37] 160,000,000
[40]
[43] 800,000,000
[46] 1,900,000,000
[49]
[52]
[55]
[58] 2,000,000,000,000
[61] 7,000,000,000,000
[64] 36,000,000,000,000
[67] 470,000,000,000,000
[70]
[73] 16,000,000,000,000,000 34,000,000,000,000,000
[76] 93,000,000,000,000,000
[79]
14 Levels: 1,900,000,000 16,000,000,000,000,000 160,000,000 ... 93,000,000,000,000,000
大多数转换技术都会发生相同或相似的情况。
问题在于将levels
输出分配给具有更多长度的原始数据集列。 我们需要将as.numeric
的输出as.numeric
到全长
DATA$flops2 <- as.numeric(levels(DATA$flops))[DATA$flops]
例如
set.seed(24)
v1 <- factor(sample(1:3, 10, replace = TRUE))
as.numeric(levels(v1))[v1]
根据显示的输入,有,
用于数字条目。 我们可能需要删除它,然后将其转换为numeric
DATA$flops2 <- as.numeric(gsub(",", "", DATA$flops))
varhandle包有效,但仍然是一个字符而不是数字。
> install.packages("varhandle")
> library(varhandle)
> DATA$flops2 <- unfactor(DATA$flops)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.