【发布时间】:2018-04-04 19:48:46
【问题描述】:
我有一个看起来像这样的数据框 df
> g <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6)
> m <- c(1, NA, NA, NA, 3, NA, 2, 1, 3, NA, 3, NA, NA, 4, NA, NA, NA, 2, 1, NA, 7, 3, NA, 1)
> df <- data.frame(g, m)
其中 g 是类别(1 到 6),m 是该类别中的值。 我设法通过以下方式找到每个类别的无 NA 值的数量:
aggregate(m ~ g, data=df, function(x) {sum(!is.na(x))}, na.action = NULL)
g m
1 1 1
2 2 3
3 3 2
4 4 1
5 5 2
6 6 3
现在想消除 None-NA 数量为 1 的行(类别),只保留 NA 数量为 2 及以上的行(类别)。
期望的结果是
g m
5 2 3
6 2 NA
7 2 2
8 2 1
9 3 3
10 3 NA
11 3 3
12 3 NA
17 5 NA
18 5 2
19 5 1
20 5 NA
21 6 7
22 6 3
23 6 NA
24 6 1
每个 g=1 和 g=4 都被消除,因为如图所示,每个类别中只有 1 个非 NA
有什么建议吗:)?
【问题讨论】:
-
df[ !is.na(df$m) & df$m > 1, ]。 (如果在aggregate之后完成,那么在df[ df$m > 1, ]之后完成。) -
删除 m 为 1 的值。这不是我想做的,我想删除我的初始数据框 df 中无 NA 值的数量为 1 的类别。例如第 1 类和第 4 类只有一个非 NA 值。这些是我要删除的行(所有类别 1 和所有类别 4)
-
@Judith 想要的输出是什么?这和我的回答相符吗?
-
我已经编辑了我的问题并包含了预期的结果