我想将几个 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)

有没有办法更新列而不按名称引用它们?

最佳答案

你很亲近。正如@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

关于r - 更新 data.table 中列子集的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30241296/

10-12 18:00