R data.table通过分组删除行?

时间:2016-01-17 04:33:14

标签: r data.table

我有一个data.table,其中包含displayDate字段,每个用户也有很多行,每个行都有不同的displayDate。每个用户都加入了该服务,并开始在不同的时间点记录数据。对于每个用户,我只想查找第一周的数据,因此我想删除给定用户在第一周内不在的行。这就是我想要做的事情,但这会产生错误:

early_data = dt[displayDate <= min(displayDate) + 7, , by=user]

我收到以下错误:

Error in `[.data.table`(dt, displayDate <= min(displayDate) + 14, , by = user) : 
  'by' or 'keyby' is supplied but not j

有没有办法通过在另一列上分组来有条件地选择行?我上面的语法出了什么问题?

1 个答案:

答案 0 :(得分:3)

我们可能需要从逻辑向量中获取行索引(.I)并使用它来对行进行子集化。

 dt[dt[, .I[displayDate <= min(displayDate)+ 7], by =user]$V1]

OP代码的一个问题是我们只使用iby选项,其间只有逗号(, ,)而且没有提供了j(如错误中所述)

数据

set.seed(24)
dt <- data.table(displayDate = sample(seq(as.Date("2014-07-01"),
            length.out=20, by = "1 day")), user = rep(1:4, each=5))