【问题标题】:R data.table filter column which name has spaceR data.table 过滤列名称有空格
【发布时间】:2018-07-14 05:07:30
【问题描述】:

我有一个 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")
}

【问题讨论】:

  • 使用dt[`Sepal Length` &gt; 3],不要覆盖subset,它是一个基础R函数
  • 感谢您的回复。但是如果我想把它放在一个循环中,该怎么做呢?
  • @Gavin cust_seg_all 是什么?
  • 对不起,我更新了。

标签: r data.table


【解决方案1】:

不能在data.tablei 段中使用variable/character 访问column 名称。相反,您可以选择使用get

可以将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")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2017-03-19
    • 2022-12-08
    • 2019-03-19
    • 2015-10-20
    • 1970-01-01
    • 2015-08-25
    • 2014-02-20
    相关资源
    最近更新 更多