我有一个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
有没有办法通过在另一列上分组来有条件地选择行?我上面的语法出了什么问题?
答案 0 :(得分:3)
我们可能需要从逻辑向量中获取行索引(.I
)并使用它来对行进行子集化。
dt[dt[, .I[displayDate <= min(displayDate)+ 7], by =user]$V1]
OP代码的一个问题是我们只使用i
和by
选项,其间只有逗号(, ,
)而且没有提供了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))