在data.table中,我无法使用列名选择行

Krz*_*ski 1 r data.table

我使用以下代码创建data.table d:

require("ltm")
require("data.table")
require(psych)

data(LSAT)
d = data.table(LSAT)
d[,"Item 6" := 0]
d[1, "Item 6"] = 1

> sapply(d,class)
   Item 1    Item 2    Item 3    Item 4    Item 5    Item 6 
"integer" "integer" "integer" "integer" "integer" "numeric" 
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用由我停止的列"Item 6"来过滤行.

> d["Item 6" == 1]
   Item 1 Item 2 Item 3 Item 4 Item 5 Item 6
1:      0      0      0      0      0      1
Run Code Online (Sandbox Code Playgroud)

但是我默认情况下不能使用数据集中的列,例如"Item 1"

> d["Item 1" == 1]
Empty data.table (0 rows) of 6 cols: Item 1,Item 2,Item 3,Item 4,Item 5,Item 6 
Run Code Online (Sandbox Code Playgroud)

谁知道我做错了什么?

Sve*_*ein 6

您必须将列Item 1中的整数与整数(1L)进行比较.请注意,这1是一个双精度值.它适用于列,Item 6因为它是class numeric(double).

d["Item 1" == 1L]
Run Code Online (Sandbox Code Playgroud)

结果:

     Item 1 Item 2 Item 3 Item 4 Item 5 Item 6
  1:      1      0      0      0      0      0
  2:      1      0      0      0      0      0
  3:      1      0      0      0      0      0
  4:      1      0      0      0      0      0
  5:      1      0      0      0      0      0
 ---                                          
920:      1      1      1      1      1      0
921:      1      1      1      1      1      0
922:      1      1      1      1      1      0
923:      1      1      1      1      1      0
924:      1      1      1      1      1      0
Run Code Online (Sandbox Code Playgroud)