我正在阅读带有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
Run Code Online (Sandbox Code Playgroud)
我想做一个df的子集,类型Car等于1和3.当我写这样的东西
>class(df)
"data.table" "data.frame"
>subset(df, Type Car %in% c(1,3))
Run Code Online (Sandbox Code Playgroud)
这不起作用.一些解决方案
您有一个数据表fread()(除非您使用过data.table = FALSE),因此您可以使用数据表行子集而不是subset().由于您具有多字词列名称,因此需要在其周围应用反向标记.
df[`Type Car` %in% c(1, 3)]
Run Code Online (Sandbox Code Playgroud)
这同样适用subset(),如果你选择使用它.实际上,在引用包含空格的多字名称时,始终需要反向标记.最好使用合格的R名称.您可以使用重置名称
setnames(df, make.names(names(df), unique = TRUE))
Run Code Online (Sandbox Code Playgroud)
所以你可以避免倒退.然后你可以做到
df[Type.Car %in% c(1, 3)]
Run Code Online (Sandbox Code Playgroud)
注意:在data.table版本1.9.6中,您现在可以fread()使用col.names参数命名列.正如Michael Chirico所提到的,最好立即解决这个问题.