重复测量的小组中独立观察计数的数量

时间:2019-05-29 21:54:08

标签: r dplyr

我想计算重复测量的组中每组独立观察的数量。

这里有一些玩具数据

library(dplyr)
df <- bind_rows(mtcars, mtcars, mtcars) %>%
 mutate(id=rep(row.names(mtcars),3)) 

在此数据中,

df %>% group_by(cyl, id) %>% count()

显示

# A tibble: 32 x 3
# Groups:   cyl, id [32]
     cyl id                 n
   <dbl> <chr>          <int>
 1     4 Datsun 710         3
 2     4 Fiat 128           3
 3     4 Fiat X1-9          3
 4     4 Honda Civic        3
 5     4 Lotus Europa       3
 6     4 Merc 230           3
 7     4 Merc 240D          3
 8     4 Porsche 914-2      3
 9     4 Toyota Corolla     3
10     4 Toyota Corona      3
# … with 22 more rows

这是每个人(又称每辆车)的观测次数。要获得每个组的独立观察数(每个cyl有多少辆车),我可以这样做。

df %>% group_by(cyl,id) %>% count() %>% ungroup() %>% group_by(cyl) %>% count()
# A tibble: 3 x 2
# Groups:   cyl [3]
    cyl     n
  <dbl> <int>
1     4    11
2     6     7
3     8    14

给出正确的结果(选中mtcars %>% group_by(cyl) %>% count()

group_by(...) %>% count() %>% ungroup() %>% group_by() %>% count()对我来说并不直观。

我想念什么?有更好的方法吗?

相关问题,是否有一种方法可以将计数传递到原始df中,或者您需要一个新对象和left_join(...)

1 个答案:

答案 0 :(得分:1)

您需要n_distinct()-

df %>% group_by(cyl) %>% summarize(n = n_distinct(id))

# A tibble: 3 x 2
    cyl     n
  <dbl> <int>
1     4    11
2     6     7
3     8    14

对于您的相关问题,您可以-

df %>% 
  group_by(cyl) %>% 
  mutate(n = n_distinct(id)) %>% 
  ungroup()