我有一个更大的数据框,有很多因子级别。我想删除所有相应Y值为零的那些级别。
示例数据集:
df <- structure(list(X = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L), .Label = c("A",
"B", "C", "D", "E"), class = "factor"), Y = c(1L, 2L, 0L, 2L,
0L, 0L, 0L, 0L, 2L, 5L, 1L, 1L, 0L, 0L, 1L, 8L, 0L, 0L, 0L, 0L
)), .Names = c("X", "Y"), class = "data.frame", row.names = c(NA,
-20L))
对于此示例,我希望删除包含B
和E
的行。
答案 0 :(得分:2)
对于'Y'中filter
值不等于0的行,我们可以按'X'和any
进行分组
library(dplyr)
df %>%
group_by(X) %>%
filter(any(Y != 0))
或使用带有否定(all
)
!
df %>%
group_by(X) %>%
filter(!all(Y==0))
答案 1 :(得分:1)
您可以在基地R
中进行df[df$X%in%df$X[df$Y!=0],]
X Y
1 A 1
2 A 2
3 A 0
4 A 2
9 C 2
10 C 5
11 C 1
12 C 1
13 D 0
14 D 0
15 D 1
16 D 8