【发布时间】:2019-11-04 15:36:52
【问题描述】:
我有以下简单的 data.table “测试”。我想选择 X 等于“A”的第 3 到 8 行的所有行:
library(data.table)
set.seed(1)
test <- data.table(X=c(rep("A",5),rep("B",5)),Y=rnorm(10),Z=rnorm(10))
test[3:8 & X == "A"] # gives the not desired output:
1: A -0.6264538 1.5117812
2: A 0.1836433 0.3898432
3: A -0.8356286 -0.6212406
4: A 1.5952808 -2.2146999
5: A 0.3295078 1.1249309
Warning message:
In 3:8 & X == "A" :
longer object length is not a multiple of shorter object length
# desired outcome:
3: A -0.8356286 -0.62124058
4: A 1.5952808 -2.21469989
5: A 0.3295078 1.12493092
在第 3:8 行之间,我想只选择带有 X == "A" 的那些。这怎么可能?请注意,使用test[3:8][X == "A"] 似乎不是一种选择,因为我想对保存在原始数据表中的这些行进行一些计算。
【问题讨论】:
-
test[3:8,][X=="A",] -
@M-M 我也在考虑同样的问题,但我想对保存在 test.xml 中的其他列(例如 Y 和 Z)执行计算。这种方法会创建一个新的 DT,因此不会保存计算。例如
test[3:8,][X=="A", Z := Z+3]
标签: r data.table subset