r - 有条件地选择 dplyr 中特定比例的值为 NA 的列

标签 r filter dataframe dplyr na

数据

我正在使用类似于 data.frame 的数据集生成如下:

set.seed(1)
dta <- data.frame(observation = 1:20,
                  valueA = runif(n = 20),
                  valueB = runif(n = 20),
                  valueC = runif(n = 20),
                  valueD = runif(n = 20))
dta[2:5,3] <- NA
dta[2:10,4] <- NA
dta[7:20,5] <- NA

列有 NA最后一列有超过 60% 的观察值 NAs .
> sapply(dta, function(x) {table(is.na(x))})
$observation

FALSE 
   20 

$valueA

FALSE 
   20 

$valueB

FALSE  TRUE 
   16     4 

$valueC

FALSE  TRUE 
   11     9 

$valueD

FALSE  TRUE 
    6    14 

问题

我希望能够删除 dplyr 中的此列管道以某种方式将它传递给 select论据。

尝试

这可以在 base 中轻松完成.例如选择小于 50% 的列 NAs我可以这样做:
dta[, colSums(is.na(dta)) < nrow(dta) / 2]

它产生:
> head(dta[, colSums(is.na(dta)) < nrow(dta) / 2], 2)
  observation    valueA    valueB    valueC
1           1 0.2655087 0.9347052 0.8209463
2           2 0.3721239        NA        NA

任务

我有兴趣在 dplyr 中实现相同的灵活性管线:
Vectorize(require)(package = c("dplyr",         # Data manipulation
                               "magrittr"),     # Reverse pipe

char = TRUE)

dta %<>%
  # Some transformations I'm doing on the data
  mutate_each(funs(as.numeric)) %>% 
  # I want my select to take place here

最佳答案

大概是这个样子?

dta %>% select(which(colMeans(is.na(.)) < 0.5)) %>% head
#  observation    valueA    valueB    valueC
#1           1 0.2655087 0.9347052 0.8209463
#2           2 0.3721239        NA        NA
#3           3 0.5728534        NA        NA
#4           4 0.9082078        NA        NA
#5           5 0.2016819        NA        NA
#6           6 0.8983897 0.3861141        NA

更新 colMeans而不是 colSums这意味着您不再需要除以行数。

而且,只是为了记录,在基础 R 中你也可以使用 colMeans :
dta[,colMeans(is.na(dta)) < 0.5]

关于r - 有条件地选择 dplyr 中特定比例的值为 NA 的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34852112/

相关文章:

r - 将文本与 R 中可变大小的图对齐

r - 基于数据类型按顺序选择列的 R tidyverse 方法

c# - 在同一节点上构建过滤器

python - 如何在可变列数匹配的 Pandas 中选择行?

java - 获取过滤器类中的 Autowired 服务

python - 将 Pandas 数据框乘以字典

scala - 如何将 RDD[Row] 转换回 DataFrame

python - 根据其他列从行中减去值

r - 如何在nlmer中为四参数逻辑模型添加固定效应

R将默认原点设置为as.Date