我使用以下代码创建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
任何人都知道我做错了什么?
答案 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