如何找到R数据框中的数字列数?

我们知道数据框可以包含任何类型的列,例如数字,字符,逻辑,因子等。并且,如果数据框包含多种类型的列,则我们可能希望查找每种类型或一个类型的列数输入数字。为此,我们可以将dplyr包的select_if函数与length函数一起使用,如以下示例所示。

例1

考虑以下数据帧-

> x1<-letters[1:20]
> x2<-rnorm(20)
> x3<-rnorm(20)
> x4<-rpois(20,5)
> df1<-data.frame(x1,x2,x3,x4)
> df1
输出结果
   x1      x2          x3    x4
1  a  -0.18404831  0.1082741 2
2  b  -0.28597330  0.2584625 0
3  c   1.29158108 -0.5444644 6
4  d  -0.80355312 -0.2261304 3
5  e  -0.86895219 -0.9499907 4
6  f  -0.69489165  0.4523057 3
7  g   0.70987445 -0.1152756 6
8  h   1.46023245 -1.5871850 8
9  i  -0.14756283  0.4843958 4
10 j  -1.46142329  0.7888207 12
11 k  -0.20521299 -0.6228141 9
12 l   0.76613077 -1.3652169 9
13 m   0.07624931  0.3870339 5
14 n   1.22399304  0.4028503 3
15 o  -0.09727281 -0.5263696 8
16 p  -1.97470094 -0.1248541 4
17 q   0.11621840 -1.9126845 4
18 r  -1.13008040 -1.5671634 1
19 s   0.73929690 -0.2571851 3
20 t  -0.13389093  0.4876529 4

加载dplyr软件包并找到df1中的数字列数-

> library("dplyr")
> length(select_if(df1,is.numeric))
[1] 3

例2

> y1<-LETTERS[1:20]
> y2<-rpois(20,2)
> y3<-rpois(20,2)
> y4<-rpois(20,10)
> y5<-sample(c("Hot","Cold"),20,replace=TRUE)
> df2<-data.frame(y1,y2,y3,y4,y5)
> df2
输出结果
   y1 y2 y3 y4   y5
1  A  1  1  10  Cold
2  B  2  0  24  Hot
3  C  3  0  13  Cold
4  D  1  3  14  Cold
5  E  4  4  16  Hot
6  F  3  3  9   Cold
7  G  2  2  12  Hot
8  H  3  1  6   Hot
9  I  4  0  11  Hot
10 J  2  1  14  Hot
11 K  2  0  14  Hot
12 L  1  1  8   Hot
13 M  3  2  10  Hot
14 N  0  5  9   Cold
15 O  1  2  14  Hot
16 P  1  0  13  Cold
17 Q  7  2  13  Hot
18 R  1  2  4   Cold
19 S  1  1  7   Cold
20 T  3  3  10  Hot

在df中找到数字列的数量-

> length(select_if(df2,is.numeric))
[1] 3

范例3

> z1<-sample(c("Male","Female"),20,replace=TRUE)
> z2<-rpois(20,25)
> z3<-rnorm(20,2,0.3)
> df3<-data.frame(z1,z2,z3)
> df3
输出结果
     z1   z2    z3
1  Female 20 2.037433
2  Female 36 2.252606
3  Female 28 2.126866
4    Male 30 1.966581
5    Male 20 1.871318
6  Female 26 2.250764
7    Male 29 1.882002
8  Female 21 1.796225
9    Male 21 2.404416
10   Male 25 1.571489
11 Female 18 2.419949
12 Male   24 1.974340
13 Male   34 1.877119
14 Male   30 2.390536
15 Female 21 1.688357
16 Female 25 1.664844
17 Male   22 2.060667
18 Male   26 1.391200
19 Female 23 1.757949
20 Female 24 1.727739

在df3中找到数字列的数量-

> length(select_if(df3,is.numeric))
[1] 2