R-如何删除具有一定百分比的空单元格的行?

时间:2019-07-18 04:44:46

标签: r dataframe rows

我的数据框很大,想删除单元格中20%为空的任何行。我似乎找不到有效执行此操作的代码。

2 个答案:

答案 0 :(得分:0)

由于缺少很多信息,我认为您可以借助data.table来解决它。有关更多信息,请参见?data.table

library(data.table)

# make a reproducible example    
set.seed(1)
dt <- data.table(matrix(sample(c(NA, 1), 500, TRUE, prob = c(0.78, 0.22)), 
                 ncol = 50))

应用一个函数,该函数查找每行有多少非NA值,将它们与允许的最大值进行比较,并仅返回匹配的那些列:

dt[, test := apply(.SD, 1, function(x) sum(!is.na(x))) > .2*50,][test == TRUE, ]

答案 1 :(得分:0)

使用mapdplyr,您可以尝试以下操作:

df:

df <- tibble(id = sequence(6), 
             var1 = c(NA, NA, NA, "x", "x", "X"), 
             var2 = c(NA, NA, NA, "x", "x", "X"), 
             var3 = c(NA, "Y", NA, "x", "x", "X"), 
             var4 = c(NA, NA, NA, "x", "x", "X"))

然后在每行中嵌套并计算perc_na并将其过滤掉:

df1 <- df %>% 
  nest(-id) %>% 
  mutate(
    perc_na = map_dbl(data, ~ sum(is.na(.x)) / ncol(.x))
  ) %>% 
  filter(perc_na <= 0.8) %>% 
  select(-perc_na) %>% 
  unnest()