我有足够大的数据data.table
,这是有史以来第一次需要,而且我对到目前为止它的简单程度感到非常满意。我今天已经阅读了相当多的文档(当然不是几乎全部),但我还没有找到这个。
我有一个由placeid
和键控的数据表t2
,另一列是t1
。我想做的是在每一行中设置t1
为最小值,按.0
t2
placeid
## Sample data
set.seed(47)
require(data.table)
dt <- data.table(placeid = rep(letters[1:3], each = 3), t1 = runif(9), t2 = runif(9))
setkeyv(dt, cols=c("placeid", "t2"))
正如t2
关键所在,我要更改的行是每个分组中的第一个。我能够让它与一个ifelse
语句一起工作,但是有没有更好的方法来使用 的i
参数来做到这一点[.data.table
?
我希望其中一个能起作用,尽管稍微多想一点,他们没有这样做是有道理的:
dt[1, t1 := 0, by = placeid] ## changes only first row
dt[which.min(t2), t1 := 0, by = placeid] ## changes only global min row
我确实发现工作(结果是所需的输出):
dt[, t1 := ifelse(t2 == min(t2), 0, t1), by = placeid] # works