我的数据框很大,想删除单元格中20%为空的任何行。我似乎找不到有效执行此操作的代码。
答案 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)
使用map
和dplyr
,您可以尝试以下操作:
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()