首页 > 解决方案 > R data.table 过滤列名称有空格

问题描述

我有一个数据表。其中一列称为“高分”。我知道我们总是可以重命名该列。但是,如果我们必须对列名使用引号,有没有办法根据列对数据进行子集化?实际上,我需要为此类列的列表执行此操作

我已经使用 iris 表制作了以下示例:

library(data.table)

dt <- as.data.table(iris)

# rename to make the variable with space
setnames(dt, c("Sepal.Length", "Sepal.Width",  "Petal.Length", "Petal.Width",  "Species"), 
     c("Sepal Length", "Sepal Width",  "Petal Length", "Petal Width",  "Species")) 

seg_name <- c("Sepal Length", "Sepal Width",  "Petal Length", "Petal Width")

然后我想根据每一列创建一些子集。但是所有这些列都带有空格或特殊字符

for (i in 1:length(seg_name)){
  # here is the problem !!!
  tmp <- dt[seg_name[i] > 6]
  fwrite(tmp, paste0('./output/', seg_name[i], '.txt'), row.names = F, sep = "\t")
}

标签: rdata.table

解决方案


不能使用in段访问column名称。相反,您可以选择使用.variable/characteridata.tableget

可以这样写for-loop

for (i in 1:length(seg_name)){
  tmp <- dt[get(seg_name[i]) > 6] 
  fwrite(tmp, paste0('./output/', seg_name[i], '.txt'), row.names = F, sep = "\t")
}

推荐阅读