【发布时间】:2018-06-22 19:33:42
【问题描述】:
我想将一个函数应用于不同的 data.table 列组,并按行执行。 例如,在下面的 data.table 中,如果 V2 和 V3 是一组,而 V3 和 V4 是另一组,我想标准化按行分组的值,这样在每一行中,那些列中的值是同一组加起来为 1。
library(data.table)
set.seed(11)
DT <- data.table(V1=LETTERS[1:5],
V2=sample(5),
V3=sample(5),
V4=sample(5),
V5=sample(5))
我可以使用 SDcols 对一组列执行此操作,但我必须先将整数转换为数字,因为 data.table 不会自动执行此操作,性能原因:
cols <- c("V2","V3")
DT[,paste0("V",2:5)] <- lapply(DT[,paste0("V",2:5)], as.numeric)
DT[, (cols):=(.SD)/sum(.SD), .SDcols=cols, by=1:nrow(DT)]
我也尝试过使用for (j in cols) set,但尽管这样做了,但它看起来很笨拙。
for (j in cols) {
set(DT, j = j, value = DT[[j]] / DT[, base::sum(.SD), .SDcols=cols, by=1:nrow(DT)][,V1])
}
另外,我的原始 data.table 中有太多的列组,无法为每个列重复执行此操作。 我现在有点碰壁了,所以非常欢迎任何建议。
【问题讨论】:
-
第二组是
V4 and V5吗?
标签: r data.table