在R中,使用data.table包,如何使用特殊变量(带空格)做一个子集

时间:2015-09-28 21:03:58

标签: r data.table

我正在阅读带有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))

这不起作用。一些解决方案?

1 个答案:

答案 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所提到的那样,立即解决这个问题是最好的。