我使用以下代码创建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)
谁知道我做错了什么?
您必须将列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)
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |