按变量分组并查找某些变量全部缺失的案例
group by variable and find cases for which some variables are all missing
示例数据框:
library(dplyr)
n <- 5
k <- 10
my_labels <- LETTERS[1:5]
foobar <- data.frame(group = gl(n, k, labels = my_labels), x = runif(n*k), y=rnorm(n*k), z = rpois(n*k, 1), month_name = (rep(month.name[1:k], n)))
index <- sample(1:50,10)
foobar[index, c("x", "y", "z")] <- NA
foobar[foobar$group %in% c("B","E"), c("x", "y", "z")] <- NA
我想找到所有且只有 group
的那些水平,除了 month_name
(当然还有 group
)之外的所有变量都完全缺失。在这种情况下,这些将是级别 B
和 E
。
解决方案应使用dplyr
(如果可能)。如果您需要 select 列,请不要 select
仅 x
、y
和 z
列,而是删除 select 您需要的列不想查,比如group
和month_name
。这是因为在实际用例中我有几十个变量必须检查缺失,只有几个变量我不想检查:当然在这个例子中为了简单起见我只使用了三个变量。
我们可以在按 'group' 分组后使用 filter_at
对行
进行子集化
foobar %>%
group_by(group) %>%
filter_at(vars(x, y, z) , all_vars(all(is.na(.))))
returns 'group' 为 'B' 或 'E'
的行
如果目的是得到其他'group's,取反filter
中的表达式
foobar %>%
group_by(group) %>%
filter_at(vars(x, y, z) , all_vars(!all(is.na(.))))
示例数据框:
library(dplyr)
n <- 5
k <- 10
my_labels <- LETTERS[1:5]
foobar <- data.frame(group = gl(n, k, labels = my_labels), x = runif(n*k), y=rnorm(n*k), z = rpois(n*k, 1), month_name = (rep(month.name[1:k], n)))
index <- sample(1:50,10)
foobar[index, c("x", "y", "z")] <- NA
foobar[foobar$group %in% c("B","E"), c("x", "y", "z")] <- NA
我想找到所有且只有 group
的那些水平,除了 month_name
(当然还有 group
)之外的所有变量都完全缺失。在这种情况下,这些将是级别 B
和 E
。
解决方案应使用dplyr
(如果可能)。如果您需要 select 列,请不要 select
仅 x
、y
和 z
列,而是删除 select 您需要的列不想查,比如group
和month_name
。这是因为在实际用例中我有几十个变量必须检查缺失,只有几个变量我不想检查:当然在这个例子中为了简单起见我只使用了三个变量。
我们可以在按 'group' 分组后使用 filter_at
对行
foobar %>%
group_by(group) %>%
filter_at(vars(x, y, z) , all_vars(all(is.na(.))))
returns 'group' 为 'B' 或 'E'
的行如果目的是得到其他'group's,取反filter
foobar %>%
group_by(group) %>%
filter_at(vars(x, y, z) , all_vars(!all(is.na(.))))