使用R计算子组内的出现次数

时间:2019-05-15 06:37:23

标签: r count

我以mtcars数据集为例

>head(mtcars)
                   mpg cyl  disp   hp  drat    wt   qsec  vs am gear carb
Mazda RX4         21.0   6   160  110  3.90  2.620  16.46  0  1    4    4
Mazda RX4 Wag     21.0   6   160  110  3.90  2.875  17.02  0  1    4    4
Datsun 710        22.8   4   108   93  3.85  2.320  18.61  1  1    4    1
Hornet 4 Drive    21.4   6   258  110  3.08  3.215  19.44  1  0    3    1
Hornet Sportabout 18.7   8   360  175  3.15  3.440  17.02  0  0    3    2
Valiant           18.1   6   225  105  2.76  3.460  20.22  1  0    3    1

我想计算没有3个“齿轮”的8缸汽车的数量。很抱歉这个非常基本的问题。谢谢。

4 个答案:

答案 0 :(得分:4)

with(mtcars, sum(cyl == 8 & gear != 3))
#[1] 2

我们可以比较这些值,并为所需条件创建逻辑矢量,并使用TRUE计算sum值的数量。

我们可以使用相同的比较来使用subset中的filterdplyr的行子集

subset(mtcars, cyl == 8 & gear != 3)

#                mpg cyl disp  hp drat   wt qsec vs am gear carb
#Ford Pantera L 15.8   8  351 264 4.22 3.17 14.5  0  1    5    4
#Maserati Bora  15.0   8  301 335 3.54 3.57 14.6  0  1    5    8

然后计算行数

nrow(subset(mtcars, cyl == 8 & gear != 3))
#[1] 2

答案 1 :(得分:1)

您也可以将dplyr::filter用作:

library(dplyr)
filter(mtcars, cyl == 8 & gear != 3)

答案 2 :(得分:1)

您可以通过首先将行名称转换为列,然后过滤您要查找的内容,然后将其输送到count()

中来实现。
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tibble)

mtcars %>% 
  tibble::rownames_to_column() %>% 
  dplyr::filter(cyl == 8 & gear != 3) %>% 
  dplyr::count(rowname)
#> # A tibble: 2 x 2
#>   rowname            n
#>   <chr>          <int>
#> 1 Ford Pantera L     1
#> 2 Maserati Bora      1

reprex package(v0.2.1)于2019-05-15创建

答案 3 :(得分:1)

或使用data.table

library(data.table)
setDT(mtcars)[cyl == 8 & gear != 3]