如何在 R 中使用具有多个匹配项的字符列创建子集?


子集是数据分析中最重要的方面之一。这种情况之一可能是基于多个值对字符列进行子集化处理。例如,如果 R 数据帧的字符列有 5 个类别,那么我们可能只需要提取 2、3 或 4 个值,然后就可以使用 stringr 包的 str_detect 函数与 dplyr 包的 filter 函数来执行此类操作。

考虑以下数据帧−

示例

 在线演示

Group<-sample(LETTERS[1:6],25,replace=TRUE)
Response<-rnorm(25,3,0.24)
df1<-data.frame(Group,Response)
df1

输出

   Group Response
1  A    3.040870
2  F    2.921251
3  E    2.911820
4  E    3.188297
5  B    3.054424
6  D    2.691892
7  F    2.714302
8  F    3.154340
9  F    3.058324
10 C    2.814400
11 B    3.040255
12 D    3.270639
13 A    3.197537
14 E    2.646717
15 D    2.671441
16 C    3.233093
17 F    2.555055
18 E    2.670018
19 E    2.607526
20 F    2.952952
21 C    3.257484
22 B    3.009312
23 C    3.142553
24 B    3.355754
25 B    3.262376

加载 dplyr 和 stringr 包,并针对 Group 中的 A、C 和 D 值对 df1 过滤−

示例

library(dplyr)
library(stringr)
df1%>%filter(str_detect(Group,"A|C|D"))

输出

  Group  Response
1   A   3.040870
2   D   2.691892
3   C   2.814400
4   D   3.270639
5   A   3.197537
6   D   2.671441
7   C   3.233093
8   C   3.257484
9   C   3.142553

示例

 在线演示

Region<-sample(c("Asia","Oceania","Africa","America"),25,replace=TRUE)
Y<-rpois(25,5)
df2<-data.frame(Region,Y)
df2

输出

   Region   Y
1  Africa   5
2  Oceania  4
3  Oceania  3
4  Oceania  3
5  Oceania  6
6  Oceania  2
7  Oceania  4
8  Oceania  6
9  Asia     1
10 Africa   4
11 Asia     7
12 Asia     10
13 Oceania  1
14 America  5
15 Oceania  3
16 Africa   8
17 Oceania  9
18 Asia     11
19 Africa   7
20 Africa   3
21 Africa   2
22 Asia     5
23 America  6
24 America  2
25 America  1

针对 Region 中的 Oceania、America 和 Africa 值对 df2 过滤−

示例

df2%>%filter(str_detect(Region,"Oceania|America|Africa"))

输出

    Region   Y
1  Africa    5
2  Oceania   4
3  Oceania   3
4  Oceania   3
5  Oceania   6
6  Oceania   2
7  Oceania   4
8  Oceania   6
9  Africa    4
10 Oceania   1
11 America   5
12 Oceania   3
13 Africa    8
14 Oceania   9
15 Africa    7
16 Africa    3
17 Africa    2
18 America   6
19 America   2
20 America   1

更新于: 2021 年 2 月 11 日

606 次浏览

开启你的 职业生涯

完成课程即可获得认证

开始
广告
© . All rights reserved.