繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM