我有一个包含六列的数据框,另存为csv文件。其中两列非常稀疏,并且包含很多空白(我想成为NA)。稀疏列flops
的值范围也很广(范围从500到93000000000000000)。
我尝试了here和here的各种解决方案,但都没有运气。由于某些原因,仅保留了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
大多数转换技术都相同或相似。
答案 0 :(得分:1)
问题在于将levels
输出分配给长度更大的原始数据集列。我们需要将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))
答案 1 :(得分:0)
varhandle包有效,但仍然是字符而不是数字。
> install.packages("varhandle")
> library(varhandle)
> DATA$flops2 <- unfactor(DATA$flops)