我们可以使用R中的多种方法来找到子集,最简单的方法是使用单方括号。如果我们要对一行或多个连续或不连续的行进行子集化,则可以使用数据框名称和单方括号直接完成。例如,如果我们有一个名为df的数据帧,并且希望对df的第一行进行子集化,则可以使用df [1,]就是这样。
请看以下数据帧:
> set.seed(214) > x<-rnorm(20) > y<-rnorm(20,1,0.5) > z<-rnorm(20,2,0.57) > a<-rnorm(20,1,0.27) > b<-rpois(20,2) > c<-rpois(20,8) > q<-rpois(20,5) > w<-rpois(20,1) > df1<-data.frame(x,y,z,a,b,c,q,w) > df1
输出结果
x y z a b c q w 1 -0.46774980 1.1546101 2.3342540 0.9143609 2 8 6 0 2 0.04088223 0.7590773 2.2095770 0.9712316 1 5 6 2 3 1.00335193 1.7272210 1.7318417 1.1871876 2 8 7 0 4 2.02522505 0.8515016 1.9366870 0.4658958 4 4 3 2 5 0.30640096 1.2055142 2.5719530 0.8469379 4 9 5 1 6 0.42577748 1.6967249 1.5668833 0.9602888 5 7 5 1 7 0.74889267 2.0073967 2.4715450 0.7116510 3 5 5 1 8 0.44645148 1.0209466 1.1198797 1.3250236 2 10 6 1 9 -2.20514180 1.6927716 2.1447475 1.1950635 0 7 5 2 10 1.98181366 1.3930763 2.3038074 1.1096453 2 6 5 1 11 -2.62555247 1.2849028 1.7522339 1.1864803 2 5 2 1 12 -0.72301789 1.0450742 0.2930952 1.1930435 2 8 4 2 13 -0.88306915 0.8239228 2.5604929 0.9686630 1 8 2 0 14 -0.52517037 1.3413851 2.0189895 0.8643248 2 9 4 0 15 -0.94756990 0.2507953 1.1719018 1.0294649 5 10 3 1 16 -0.51916173 1.1889573 2.1277015 0.6870978 3 8 5 0 17 -1.12071138 1.4807661 1.9248328 1.0950342 1 12 4 2 18 0.42359496 1.5472942 1.7000941 0.8440301 1 12 2 2 19 0.46975875 1.4835207 1.2282101 1.0651645 2 6 7 0 20 -0.21269994 0.8056228 1.7694949 0.9686047 5 11 6 0
子集df1的不同行:
> df1[1,]
输出结果
x y z a b c q w 1 -0.4677498 1.15461 2.334254 0.9143609 2 8 6 0
> df1[2,]
输出结果
x y z a b c q w 2 0.04088223 0.7590773 2.209577 0.9712316 1 5 6 2
> df1[3,]
输出结果
x y z a b c q w 3 1.003352 1.727221 1.731842 1.187188 2 8 7 0
> df1[5,]
输出结果
x y z a b c q w 5 0.306401 1.205514 2.571953 0.8469379 4 9 5 1
> df1[8,]
输出结果
x y z a b c q w 8 0.4464515 1.020947 1.11988 1.325024 2 10 6 1
> df1[9,]
输出结果
x y z a b c q w 9 -2.205142 1.692772 2.144747 1.195064 0 7 5 2
> df1[12,]
输出结果
x y z a b c q w 12 -0.7230179 1.045074 0.2930952 1.193043 2 8 4 2
> df1[15,]
输出结果
x y z a b c q w 15 -0.9475699 0.2507953 1.171902 1.029465 5 10 3 1
> df1[18,]
输出结果
x y z a b c q w 18 0.423595 1.547294 1.700094 0.8440301 1 12 2 2
> df1[20,]
输出结果
x y z a b c q w 20 -0.2126999 0.8056228 1.769495 0.9686047 5 11 6 0
让我们看另一个例子:
> v1<-rexp(20,1.24) > v2<-rexp(20,3.7) > v3<-runif(20,2,8) > df2<-data.frame(v1,v2,v3) > df2
输出结果
v1 v2 v3 1 0.20602134 0.06916392 6.107286 2 0.29568560 0.36353986 3.529261 3 0.12250478 0.18168857 4.524547 4 2.37228009 0.20580564 6.795179 5 0.51194665 0.03005732 3.208580 6 0.25267457 0.12722097 2.184198 7 0.03742423 0.01711751 4.135536 8 0.45572624 0.29921997 6.046839 9 0.63617201 0.55386034 7.812157 10 0.81699828 0.56160708 4.071993 11 0.26570318 0.06759301 3.625271 12 0.63101790 0.10742853 2.573730 13 0.60664724 0.28611242 4.053965 14 0.79000859 0.09818221 6.257031 15 0.44555943 0.01828257 3.953676 16 1.87292479 0.20373389 3.407394 17 0.17258681 0.20278572 5.874761 18 0.09658603 0.09844967 5.382432 19 0.04970458 0.46433382 7.007515 20 0.31233081 0.06999427 4.855714
子集df2的不同行:
> df2[3,]
输出结果
v1 v2 v3 3 0.1225048 0.1816886 4.524547
> df2[5,]
输出结果
v1 v2 v3 5 0.5119466 0.03005732 3.20858
> df2[7,]
输出结果
v1 v2 v3 7 0.03742423 0.01711751 4.135536
> df2[9,]
输出结果
v1 v2 v3 9 0.636172 0.5538603 7.812157
> df2[10,]
输出结果
v1 v2 v3 10 0.8169983 0.5616071 4.071993
> df2[12,]
输出结果
v1 v2 v3 12 0.6310179 0.1074285 2.57373
> df2[15,]
输出结果
v1 v2 v3 15 0.4455594 0.01828257 3.953676
> df2[17,]
输出结果
v1 v2 v3 17 0.1725868 0.2027857 5.874761
> df2[20,]
输出结果
v1 v2 v3 20 0.3123308 0.06999427 4.855714