子集是数据分析的最重要方面之一。一种这样的情况是基于多个值对字符列进行子集设置。例如,如果R数据帧的字符列具有5个类别,则我们可能只希望提取2个或3个或4个值,则可以通过使用dplyr包的过滤器函数和stringr包的str_detect函数来完成。
考虑以下数据帧-
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和stringer程序包,并根据组中的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
根据区域中的大洋洲,美洲和非洲值过滤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