如何在 base R 中使用子集查找频率?


查找频率最简单的方法是为提供的向量或数据框列创建表格,这可以通过 table 函数完成。但是,如果需要使用子集查找频率,则还需要使用 subset 函数和 transform 函数,如下面的示例所示。

示例 1

以下代码片段创建了一个示例数据框 -

head(ChickWeight,20)

输出

创建了以下数据框 -

 weight Time Chick Diet
1   42   0   1     1
2   51  2    1     1
3   59  4    1     1
4   64  6    1     1
5   76  8    1     1
6   93 10    1     1
7  106 12    1     1
8  125 14    1     1
9  149 16    1     1
10 171 18    1     1
11 199 20    1     1
12 205 21    1     1
13 40   0    2     1
14 49   2    2     1
15 58  4     2     1
16 72   6    2     1
17 84   8    2     1
18 103 10    2     1
19 122 12    2     1
20 138 14    2     1

要在 base R 中使用子集查找频率,请将以下代码添加到上述代码片段中 -

str(ChickWeight)

输出

如果您将所有上述代码片段作为单个程序执行,它将生成以下输出 -

Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame': 578 obs. of 4 variables:
$ weight: num 42 51 59 64 76 93 106 125 149 171 ...
$ Time : num 0 2 4 6 8 10 12 14 16 18 ...
$ Chick : Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ...
$ Diet : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "formula")=Class 'formula' language weight ~ Time | Chick
.. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
- attr(*, "outer")=Class 'formula' language ~Diet
.. ..- attr(*, ".Environment")=<environment: R_EmptyEnv>
- attr(*, "labels")=List of 2
..$ x: chr "Time"
..$ y: chr "Body weight"
- attr(*, "units")=List of 2
..$ x: chr "(days)"
..$ y: chr "(gm)"

要在 base R 中使用子集查找频率,请将以下代码添加到上述代码片段中 -

transform(table(Diet=subset(ChickWeight,Time>20,select=Diet)))

输出

如果您将所有上述代码片段作为单个程序执行,它将生成以下输出 -

  Diet Freq
1  1   16
2  2   10
3  3   10
4  4    9

示例 2

以下代码片段创建了一个示例数据框 -

head(mtcars,20)

创建了以下数据框 -

                     mpg  cyl disp   hp   drat  wt   qsec  vs am gear carb
Mazda RX4             21.0 6  160.0  110  3.90 2.620 16.46  0  1  4   4
Mazda RX4 Wag         21.0 6  160.0  110  3.90 2.875 17.02  0  1  4   4
Datsun 710            22.8 4  108.0   93  3.85 2.320 18.61  1  1  4   1
Hornet 4 Drive        21.4 6  258.0  110  3.08 3.215 19.44  1  0  3   1
Hornet Sportabout     18.7 8  360.0  175  3.15 3.440 17.02  0  0  3   2
Valiant               18.1 6  225.0  105  2.76 3.460 20.22  1  0  3   1
Duster 360            14.3 8  360.0  245  3.21 3.570 15.84  0  0  3   4
Merc 240D             24.4 4  146.7   62  3.69 3.190 20.00  1  0  4   2
Merc 230              22.8 4  140.8   95  3.92 3.150 22.90  1  0  4   2
Merc 280              19.2 6  167.6  123  3.92 3.440 18.30  1  0  4   4
Merc 280C             17.8 6  167.6  123  3.92 3.440 18.90  1  0  4   4
Merc 450SE            16.4 8  275.8  180  3.07 4.070 17.40  0  0  3   3
Merc 450SL            17.3 8  275.8  180  3.07 3.730 17.60  0  0  3   3
Merc 450SLC           15.2 8  275.8  180  3.07 3.780 18.00  0  0  3   3
Cadillac Fleetwood    10.4 8  472.0  205  2.93 5.250 17.98  0  0  3   4
Lincoln Continental   10.4 8  460.0  215  3.00 5.424 17.82  0  0  3   4
Chrysler Imperial     14.7 8  440.0  230  3.23 5.345 17.42  0  0  3   4
Fiat 128              32.4 4   78.7   66  4.08 2.200 19.47  1  1  4   1
Honda Civic           30.4 4   75.7   52  4.93 1.615 18.52  1  1  4   2
Toyota Corolla        33.9 4   71.1   65  4.22 1.835 19.90  1  1  4   1

要在 base R 中使用子集查找频率,请将以下代码添加到上述代码片段中 -

str(mtcars)

输出

如果您将所有上述代码片段作为单个程序执行,它将生成以下输出 -

'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...

要在 base R 中使用子集查找频率,请将以下代码添加到上述代码片段中 -

transform(table(cyl=subset(mtcars,hp>110,select=cyl)))

输出

如果您将所有上述代码片段作为单个程序执行,它将生成以下输出 -

  cyl Freq
1  4   1
2  6   3
3  8  14

更新时间: 2021年11月3日

351 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告