Data.table: 使用`by = .I`在data.table中进行行操作

创建于 2016-06-07  ·  3评论  ·  资料来源: Rdatatable/data.table

我正在探索如何在data.table进行行操作的替代方法,我想我发现了一个错误。

这三行代码应该返回相同的结果。 但是, by = .I的结果似乎返回了错误的结果。

dt[, sdd := sum(.SD[, 2:4, with=FALSE]), by = 1:NROW(dt) ]
dt[, rowpos := .I][ , sdd := sd(.SD[, -1, with=FALSE]), by = rowpos ]
dt[ , sdd := sd(.SD[, -1, with=FALSE]), by = .I ]

样本数据:
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)], V1=1:5, V2=3:7, V3=5:1)

Low bug

所有3条评论

或者, by = .I应该给出一个错误,尽管让它与i-expression一起工作会很好。

by使用.N类似问题(再次,人们可能会天真地尝试 - dt[, ..., by = 1:.N] - 尽管这个特定的表达式给出了错误,但它并不是真正的“正确”错误)。

为什么不通过使用by = .I来“按行”添加功能,这听起来很直观。

1063

@leoluyi

by = .I的行为等价于by = NULL 。 看看这个 SO 讨论https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i

此页面是否有帮助?
0 / 5 - 0 等级