如何仅根据分类列中的一个值对具有条件的 R 数据框进行子集化?

要仅根据分类列中的一个值对具有条件的 R 数据框进行子集化,我们可以按照以下步骤操作 -

  • 首先,创建一个数据框。

  • 然后,使用 dplyr 包的过滤器功能对具有条件的数据帧进行子集化。

创建数据框

让我们创建一个数据框,如下所示 -

Class<-sample(c("First","Second","Third","Fourth"),25,replace=TRUE)
x<-sample(1:10,25,replace=TRUE)
y<-sample(1:10,25,replace=TRUE)
z<-sample(1:10,25,replace=TRUE)
df<-data.frame(Class,x,y,z)
df

执行时,上述脚本生成以下内容output(this output will vary on your system due to randomization)-

Class x y z
1 Fourth 10 6 7
2 First 10 1 5
3 Third 3 5 9
4 First 2 8 5
5 Third 4 9 9
6 First 2 5 3
7 Second 2 7 7
8 Third 6 4 4
9 First 2 9 3
10 First 10 7 4
11 Fourth 1 9 3
12 First 8 7 8
13 First 7 5 3
14 First 10 4 2
15 First 8 9 2
16 First 9 9 10
17 Third 1 1 10
18 Third 5 9 6
19 First 3 2 9
20 Third 8 5 4
21 Third 9 2 7
22 Second 5 9 3
23 Third 10 3 6
24 First 10 6 9
25 Third 1 10 4

使用基于分类列的条件子集数据框

当 x 大于 5 且 Class 为 First 时,使用过滤器函数对 df 进行子集化 -

Class<-sample(c("First","Second","Third","Fourth"),25,replace=TRUE)
x<-sample(1:10,25,replace=TRUE)
y<-sample(1:10,25,replace=TRUE)
z<-sample(1:10,25,replace=TRUE)
df<-data.frame(Class,x,y,z)
library(dplyr)
df %>% group_by(Class) %>% filter(x>5 & Class=="First")

输出

# A tibble: 8 x 4
# Groups: Class [1]
Class    x      y    z
 <chr> <int> <int> <int>
1 First 10    1    5
2 First 10    7    4
3 First 8     7    8
4 First 7     5    3
5 First 10    4    2
6 First 8     9    2
7 First 9     9    10
8 First 10    6    9

使用基于分类列的条件子集数据框

当 y 大于 5 且 Class 为 First 时,使用过滤器函数对 df 进行子集化 -

Class<-sample(c("First","Second","Third","Fourth"),25,replace=TRUE)
x<-sample(1:10,25,replace=TRUE)
y<-sample(1:10,25,replace=TRUE)
z<-sample(1:10,25,replace=TRUE)
df<-data.frame(Class,x,y,z)
library(dplyr)
df %>% group_by(Class) %>% filter(y>5 & Class=="First")

输出

# A tibble: 7 x 4
# Groups: Class [1]
Class    x     y    z
 <chr> <int> <int> <int>
1 First 2     8    5
2 First 2     9    3
3 First 10    7    4
4 First 8     7    8  
5 First 8     9    2
6 First 9     9    10
7 First 10    6    9

使用基于分类列的条件子集数据框

当 z 大于 5 且 Class 为 First 时,使用过滤器函数对 df 进行子集化 -

Class<-sample(c("First","Second","Third","Fourth"),25,replace=TRUE)
x<-sample(1:10,25,replace=TRUE)
y<-sample(1:10,25,replace=TRUE)
z<-sample(1:10,25,replace=TRUE)
df<-data.frame(Class,x,y,z)
library(dplyr)
df %>% group_by(Class) %>% filter(z>5 & Class=="First")

输出

# A tibble: 4 x 4
# Groups: Class [1]
Class    x    y    z
<chr> <int> <int> <int>
1 First 8    7    8
2 First 9    9    10
3 First 3    2    9
4 First 10   6    9

猜你喜欢