如何基于R中的向量值对数据帧进行子集化?
如果我们有一个向量和一个数据帧,并且数据帧具有一列,其中包含与向量中相似的值,那么我们可以基于该向量创建数据帧的子集。可以使用单个方括号和%in%运算符来完成此操作。%in%运算符将帮助我们在数据框列中找到与向量值匹配的值。查看以下示例以了解其工作原理。
例1
考虑下面的数据帧df1和向量v1-
> x1<-rpois(20,2) > x2<-rnorm(20) > df1<-data.frame(x1,x2) > df1输出结果
x1 x2 1 2 -1.0627997 2 4 -0.2159125 3 1 0.2443734 4 3 -1.3513780 5 3 1.7359994 6 1 1.2563915 7 1 -0.8998470 8 2 0.4187820 9 1 2.6305826 10 4 -0.8040052 11 4 0.4067659 12 3 -1.7879203 13 3 1.7214544 14 2 -0.4699642 15 2 0.3626548 16 4 1.3013632 17 2 -0.2983836 18 1 1.8943313 19 1 1.5637219 20 2 0.8786897
根据向量v1中的值对数据帧df1进行子设置-
> df1[df1$x1 %in% v1,]输出结果
x1 x2 1 2 -1.0627997 3 1 0.2443734 4 3 -1.3513780 5 3 1.7359994 6 1 1.2563915 7 1 -0.8998470 8 2 0.4187820 9 1 2.6305826 12 3 -1.7879203 13 3 1.7214544 14 2 -0.4699642 15 2 0.3626548 17 2 -0.2983836 18 1 1.8943313 19 1 1.5637219 20 2 0.8786897
例2
> y1<-sample(LETTERS[1:5],20,replace=TRUE) > y2<-rpois(20,2) > y3<-rpois(20,5) > df2<-data.frame(y1,y2,y3) > df2输出结果
y1 y2 y3 1 C 0 5 2 A 2 5 3 A 2 1 4 D 1 6 5 B 0 4 6 E 6 9 7 E 0 5 8 C 1 9 9 D 1 6 10 D 2 6 11 A 4 5 12 D 1 6 13 E 1 5 14 E 2 6 15 C 5 4 16 A 0 3 17 D 2 5 18 B 1 10 19 E 3 3 20 A 2 1
根据向量v2中的值对数据帧df2进行子设置-
> v2<-c("A","B","C","D") > df2[df2$y1 %in% v2,]输出结果
y1 y2 y3 1 C 0 5 2 A 2 5 3 A 2 1 4 D 1 6 5 B 0 4 8 C 1 9 9 D 1 6 10 D 2 6 11 A 4 5 12 D 1 6 15 C 5 4 16 A 0 3 17 D 2 5 18 B 1 10 20 A 2 1