2014-09-01 77 views
0

下面是一个示例数据集。筛选出特定类别

a <- structure(list(ID = c("A1", "A2", "A3", "A1", "A1", "A2", "A4", "A5", "A2", "A3"), 
Type = c("A", "B", "C", "A", "A", "A", "B", "B", "C", "B"), 
Alc = c("E", "F", "G", "E", "E", "E", "F", "F", "F", "F"), 
Com = c("Y", "N", "Y", "N", "Y", "Y", "Y", "N", "N", "Y")), 
.Names = c("ID", "Type", "Alc", "Com"), row.names = c(NA, -10L), class = "data.frame") 
a 
    ID Type Alc Com 
1 A1 A E Y 
2 A2 B F N 
3 A3 C G Y 
4 A1 A E N 
5 A1 A E Y 
6 A2 A E Y 
7 A4 B F Y 
8 A5 B F N 
9 A2 C F N 
10 A3 B F Y 

我想要一个在Alc中没有“E”的数据集。我做了以下。

library(dplyr) 
b <- filter(a, Alc=="G"| Alc=="F") 
b 
    ID Type Alc Com 
1 A2 B F N 
2 A3 C G Y 
3 A4 B F Y 
4 A5 B F N 
5 A2 C F N 
6 A3 B F Y 

如果在Alc中有很多类别,记下所有类别是很麻烦的。我需要一个简单的修复。

感谢您的帮助。

回答

3

可以使用“不等于”操作者!=

b <- filter(a, Alc!="E") 
+0

我试图做到这一点;不知道那时发生了什么。现在它可以工作。 – 2014-09-01 16:29:54

+0

请注意,'%in%'在这类情况下也可能有帮助(例如,%c(“G”,“F”)或'!(%c% – 2014-09-01 16:31:53

0

尝试 subset(a,Alc $in$ c("G","F")),这是为了处理数据帧的对象的常见方式,与标准子集托架功能[ ]沿。请参阅?subsetdrop参数。

+1

其实标准的方式可能是'a [a $ Alc!=“E”,]' – 2014-09-01 16:43:05

1

尝试:

a[a$Alc!='E',] 
    ID Type Alc Com 
2 A2 B F N 
3 A3 C G Y 
7 A4 B F Y 
8 A5 B F N 
9 A2 C F N 
10 A3 B F Y