【问题标题】:Update class of a subset of columns in data.table更新 data.table 中列子集的类
【发布时间】:2015-05-14 15:31:59
【问题描述】:

我想将几个 data.table 列从因子更改为字符

library(data.table)

ir <- as.data.table(iris)
ir[, Species2 := Species]

我可以确定我需要更改哪些列

facs <- which(sapply(ir, is.factor))
facs

我可以按名称更新列:

ir[, c("Species", "Species2") := lapply(.SD, as.character), .SDcols = facs]
sapply(ir, class)

有没有办法在不通过名称引用它们的情况下更新列?

【问题讨论】:

  • 在这里,您通过查找哪些列是因子来更改类。我不明白你想要的结果
  • 我得到了我想要的结果,但它依赖于我知道列的名称,这些列是我使用:= 时的因素。有没有一种编程方式来替换c("Species", "Species2")
  • 可以使用数字索引5:6 :=
  • 括号在这里工作ir[,(facs):=lapply(.SD,as.character),.SDcols=facs]。另外,set.
  • 完美——data.table 越来越好!

标签: r data.table


【解决方案1】:

你很亲密。正如@akrun 在评论中提到的,您可以按索引引用列,这是您使用which 获得的。

ir[, which(sapply(ir, is.factor)) := lapply(.SD, as.character), .SDcols = facs]

或者更好,正如@Frank 在评论中提到的,您可以使用括号。

ir[, (fac) := lapply(.SD, as.character), .SDcols = fac]

现在,如果您查看str(ir),您会发现SpeciesSpecies2 现在是chr,而不是factor

【讨论】:

  • @EdG:很高兴我能帮上忙。也非常感谢 akrun 和 Frank。
  • @Akrun - 如果问题不够清楚,我们深表歉意。
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2021-12-13
  • 2015-02-07
  • 2015-04-08
相关资源
最近更新 更多