我正在阅读带有data.table包的txt文件。
df<- fread("df.txt")
head(df)
Number Region Type Car ...
1 1 1
2 1 2
3 1 1
4 1 1
5 2 2
6 2 3
我想做一个df的子集,其中Type Car等于1和3.当我写这样的东西时
>class(df)
"data.table" "data.frame"
>subset(df, Type Car %in% c(1,3))
这不起作用。一些解决方案?
答案 0 :(得分:5)
您已获得fread()
的数据表(除非您使用data.table = FALSE
),因此您可以使用数据表行子集而不是subset()
。由于您有一个多字列名称,因此需要在其周围应用反向标记。
df[`Type Car` %in% c(1, 3)]
如果您选择使用它,subset()
也是如此。实际上,在引用包含空格的多字名称时,始终需要反向标记。最好使用合格的R名称。您可以使用
setnames(df, make.names(names(df), unique = TRUE))
所以你可以避免反击。然后你可以做
df[Type.Car %in% c(1, 3)]
注意:在 data.table 版本1.9.6中,您现在可以使用fread()
参数命名col.names
中的列。正如Michael Chirico所提到的那样,立即解决这个问题是最好的。