在data.table中对多个列进行计数

时间:2017-05-08 18:30:22

标签: r count data.table

我在不同的user和不同的time处观察situation,我可能会多次看到它们,如下所示:

df <- data.table(time = c(1,1,1,2,2),
                 user = c(1,1,2,1,2),
                 situation = c(1,1,1,2,2),
                 observation = c(1,2,1,1,1))

我想要做的是使用user计算每个时间段内situation - data.table的数量。预期产出:

result <- data.table(time = c(1,2),
                     user_situations = c(2,2))

我知道我可以用链式方式做到这一点:

 unique(df[, .(time, user, situation)])[, .(user_situations = .N), .(time)]

但是想知道是否有一种简单的方法可以一次性完成。

1 个答案:

答案 0 :(得分:2)

dplyr解决方案:

library(dplyr)
df <- data.table(time = c(1,1,1,2,2),
             user = c(1,1,2,1,2),
             situation = c(1,1,1,2,2),
             observation = c(1,2,1,1,1))

df %>% group_by(time) %>%
  distinct(user, situation) %>%
  summarise(user_situations = n())

# tbl_dt [2 × 2]
   time user_situation
  <dbl>          <int>
1     1              2
2     2              2