如何将稀疏数据帧转换为数值?

时间:2018-12-30 19:21:03

标签: r dataframe numeric factors

我有一个包含六列的数据框,另存为csv文件。其中两列非常稀疏,并且包含很多空白(我想成为NA)。稀疏列flops的值范围也很广(范围从500到93000000000000000)。

我尝试了herehere的各种解决方案,但都没有运气。由于某些原因,仅保留了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

大多数转换技术都相同或相似。

2 个答案:

答案 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)