【问题标题】:How do I convert sparse data frame into numeric values?如何将稀疏数据框转换为数值?
【发布时间】:2018-12-30 19:21:03
【问题描述】:

我有一个数据框,其中包含六列保存为 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

大多数转换技术都会发生相同或相似的情况。

【问题讨论】:

    标签: r dataframe numeric factors


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

      varhandle 包有效,但仍然是字符而不是数字。

      > install.packages("varhandle")
      > library(varhandle)
      > DATA$flops2 <- unfactor(DATA$flops)
      

      【讨论】:

        猜你喜欢
        • 2016-08-03
        • 2020-09-04
        • 2021-12-14
        • 2015-01-16
        • 2013-05-28
        • 2020-04-07
        • 2021-02-21
        • 1970-01-01
        • 2016-09-09
        相关资源
        最近更新 更多