如何在R数据框中基于列的字符串值和OR条件筛选子集?


我们可能需要使用特定列的一个或多个值来创建R数据框的子集。例如,假设我们有一个包含C1、C2、C3、C4和C5列的数据框df,并且这些列中的每个都包含从A到Z的值。如果我们想使用C1列中的值A或B来选择行,则可以这样操作:df[df$C1=="A"|df$C1=="B",].

考虑下面的数据框:

示例

set.seed(99)
x1<-rep(c("A","B","C"),times=c(8,7,5))
x2<-sample(1:9,20,replace=TRUE)
df1<data.frame(x1,x2)
df1

输出

x1 x2
1 A 1
2 A 6
3 A 6
4 A 5
5 A 3
6 A 2
7 A 6
8 A 4
9 B 4
10 B 4
11 B 9
12 B 2
13 B 8
14 B 6
15 B 4
16 C 4
17 C 1
18 C 7
19 C 2
20 C 7

基于包含A或C的x1列的行进行子集筛选:

示例

df1[df1$x1=="A"|df1$x1=="C",]

输出

   x1 x2
1  A  1
2  A  6
3  A  6
4  A  5
5  A  3
6  A  2
7  A  6
8  A  4
16 C  4
17 C  1
18 C  7
19 C  2
20 C  7

基于包含B或C的x1列的行进行子集筛选:

示例

df1[df1$x1=="B"|df1$x1=="C",]

输出

    x1 x2
9   B  4
10  B  4
11  B  9
12  B  2
13  B  8
14  B  6
15  B  4
16  C  4
17  C  1
18  C  7
19  C  2
20  C  7

基于包含A或B的x1列的行进行子集筛选:

示例

df1[df1$x1=="A"|df1$x1=="B",]

输出

  x1  x2
1  A  1
2  A  6
3  A  6
4  A  5
5  A  3
6  A  2
7  A  6
8  A  4
9  B  4
10 B  4
11 B  9
12 B  2
13 B  8
14 B  6
15 B  4

让我们来看另一个例子:

示例

在线演示

Party<-sample(c("Democratic","Republican","Reform","Libertarian"),20,replace=TRUE) Rate_Per<-sample(1:100,20,replace=TRUE)
df2<-data.frame(Party,Rate_Per)
df2

输出

     Party      Rate_Per
1  Libertarian   45
2  Republican    79
3  Democratic    23
4  Reform        55
5  Republican    37
6  Reform        70
7  Reform        64
8  Republican    62
9  Reform        84
10 Republican    18
11 Libertarian    4
12 Republican    74
13 Reform        11
14 Libertarian   49
15 Democratic    39
16 Libertarian   76
17 Democratic     5
18 Libertarian   81
19 Democratic     1
20 Republican    56

基于包含共和党或民主党的Party列的行进行子集筛选:

示例

df2[df2$Party=="Republican"|df2$Party=="Democratic",]

输出

Party Rate_Per
1 Republican  38
2 Republican  79
4 Democratic  85
7 Republican  29
8 Republican  45
9 Democratic  12
10 Republican 73
13 Republican 38
15 Democratic 40
16 Republican 35
19 Republican 50

更新于:2020年10月9日

3K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告