DT - data.table,列为" A"(列索引== 1)," B"(列索引2)," C"等等
例如,下一个代码生成子集DT1,其中包含A == 2的行:
DT1 <- DT[A==2, ]
但是如何仅使用列索引来创建像DT1这样的子集?
例如,像下一个代码不起作用:
DT1 <- DT[.SD==2, .SDcols = 1]
答案 0 :(得分:6)
建议不要使用列索引而不是列名,因为它会使您的代码难以理解,并且对于数据可能发生的任何更改都会敏捷。 (例如,请参阅第一个问题in the package FAQ的第一段。)但是,您可以使用列索引进行子集,如下所示:
DT = data.table(A = 1:5, B = 2:6, C = 3:7)
DT[DT[[1]] == 2]
# A B C
#1: 2 3 4
答案 1 :(得分:1)
我们可以使用maxDamage
获取行索引并将其用于.I
DT
DT[DT[, .I[.SD==2], .SDcols = 1]]
# A B C
#1: 2 3 4