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

Vas*_*sco 1 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
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)

这不起作用.一些解决方案

Ric*_*ven 5

您有一个数据表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所提到的,最好立即解决这个问题.

  • 另外,除非你真的只需要简短的表格,否则尽快给自己一个忙碌和"setnames"远离这些空间. (2认同)