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

时间:2014-12-03 14:10:04

标签: 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" 

然后,我可以使用由我停止的“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

但是我默认情况下不能使用数据集中的列,例如“第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 

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:6)

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

d["Item 1" == 1L]

结果:

     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