Use*_*239 3 r subset data.table
我有以下简单的data.table“ test”。我想选择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
Run Code Online (Sandbox Code Playgroud)
在3:8行之间,我只选择X ==“ A”的那些。这怎么可能?请注意,使用test[3:8][X == "A"]
似乎不是一种选择,因为我想对保存在原始数据表中的这些行进行一些计算。
这3:8
绝对不是第二个表达式(X == "A"
)的长度,而且,我们将逻辑索引与数字索引进行比较。而是使用%in%
行序列将第一个表达式转换为逻辑,然后发生两件事-1)长度相同,2)类型相同
test[(seq_len(.N) %in% 3:8) & X == "A"]
# X Y Z
#1: A -0.8356286 -0.6212406
#2: A 1.5952808 -2.2146999
#3: A 0.3295078 1.1249309
Run Code Online (Sandbox Code Playgroud)