使用data.table按组筛选行

时间:2015-08-05 08:43:34

标签: r data.table

我正在学习data.table,我想重现我用dplyr实现的计算。

我有一个数据框,其中包含由2个ID识别的个人的每日观察结果。我想为每个人保留最后一次观察。

例如,使用那些虚拟数据:

set.seed(42)
datas <- data.frame(id1 = rep(1:2, 2), 
                    id2 = rep(letters[1:2], 2), 
                    date = seq(Sys.Date() - 3, Sys.Date(), by = "day"), 
                    x = rnorm(4))

  id1 id2       date          x
1   1   a 2015-08-02  1.3709584
2   2   b 2015-08-03 -0.5646982
3   1   a 2015-08-04  0.3631284
4   2   b 2015-08-05  0.6328626

这是我期待的输出:

library(dplyr)
datas %>% 
  group_by(id1, id2) %>% 
  filter(date == max(date))

Source: local data frame [2 x 4]
Groups: id1, id2

  id1 id2       date         x
1   1   a 2015-08-04 0.3631284
2   2   b 2015-08-05 0.6328626

这是我对data.table的尝试:

library(data.table)

datas.dt <- data.table(datas)
tmp <- datas.dt[, list(date = max(date)), by = c("id1", "id2")]

setkey(datas.dt, id1, id2, date)
setkey(tmp, id1, id2, date)

datas.dt[tmp]

id1 id2       date         x
1:   1   a 2015-08-04 0.3631284
2:   2   b 2015-08-05 0.6328626

我打电话给一个联盟,所以我觉得我在基础知识上遗漏了一些东西,但我找不到更直接的方法来实现这个目标。

有没有更直接的data.table方式来实现我想做的事情?感谢。

0 个答案:

没有答案