【问题标题】:A data.table solution to remove variables with more than a certain percentage NA一个 data.table 解决方案,用于删除具有超过一定百分比 NA 的变量
【发布时间】:2020-01-02 20:01:32
【问题描述】:

我一直在使用以下代码来删除具有太多NA 的变量:

DT <- DT[,colMeans(is.na(DT)) <= 0.1]

但是,在 data.table 上,这给出了:

library(data.table)
set.seed(1)
DT <- data.table(panelID = sample(50,50),                                                    # Creates a panel ID
                      Country = c(rep("Albania",30),rep("Belarus",50), rep("Chilipepper",20)),       
                      some_NA = sample(0:5, 6),                                             
                      some_NA_factor = sample(0:5, 6),         
                      Group = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
                      Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
                      norm = round(runif(100)/10,2),
                      Income = round(rnorm(10,-5,5),2),
                      Happiness = sample(10,10),
                      Sex = round(rnorm(10,0.75,0.3),2),
                      Age = sample(100,100),
                      Educ = round(rnorm(10,0.75,0.3),2))           
DT [, uniqueID := .I]                                                                        # Creates a unique ID     
DT[DT == 0] <- NA                                                                            # https://stackoverflow.com/questions/11036989/replace-all-0-values-to-na
DT$some_NA_factor <- factor(DT$some_NA_factor)

> DT <- DT[,colMeans(is.na(DT)) <= 0.1]
> DT
       panelID        Country        some_NA some_NA_factor          Group           Time           norm         Income      Happiness            Sex            Age 
          TRUE           TRUE          FALSE          FALSE           TRUE           TRUE           TRUE           TRUE           TRUE           TRUE           TRUE 
          Educ       uniqueID 
          TRUE           TRUE 

现在我显然可以每次都将我的数据集更改为数据帧,但由于我使用大型数据集,data.table 解决方案会更有效。正确的data.table 方法是什么?

【问题讨论】:

    标签: r data.table na


    【解决方案1】:

    如果我们需要对列进行子集化

    DT[, DT[,colMeans(is.na(.SD)) <= 0.1], with = FALSE]
    

    【讨论】:

      【解决方案2】:

      或者使用.SDcols:

      DT[, .SD, .SDcols = DT[, colMeans(is.na(.SD)) <= 0.1]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 2019-05-06
        • 2019-08-16
        • 1970-01-01
        • 2016-01-21
        • 2012-03-31
        • 2021-05-20
        • 2018-12-22
        相关资源
        最近更新 更多