根据Y中的值从变量X中删除因子水平

时间:2017-10-19 17:35:38

标签: r

我有一个更大的数据框,有很多因子级别。我想删除所有相应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)) 

对于此示例,我希望删除包含BE的行。

2 个答案:

答案 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