我想将几个 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)
,您会看到 Species
和 Species2
现在是 chr
而不是 factor
。关于r - 更新 data.table 中列子集的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30241296/