如何基于具有OR条件的列的字符串值对R数据帧进行子集化?

我们可能想使用特定列的一个或多个值来创建R数据帧的子集。例如,假设我们有一个数据帧df,其中包含C1,C2,C3,C4和C5列,并且这些列中的每一个都包含从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

基于包含共和党或民主党的党列的子集-

示例

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
猜你喜欢