在:
V1 V2
1: A 0.6
2: B 0.3
3: C 0.1
输出(V1是组合,V2是它们的总和):
V1 V2
1: AA 1.2
2: AB 0.9
3: AC 0.7
4: BA 0.9
5: BB 0.6
6: BC 0.4
7: CA 0.7
8: CB 0.4
9: CC 0.2
通过double for循环来实现这一点,这似乎很慢……是否有更快的,数据稳定的,加快速度的方法?
脚本:
dtIn <- data.table(LETTERS[1:3], c(0.6, 0.3, 0.1))
dtOut <- list()
for (i in 1:nrow(dtIn))
for (j in 1:nrow(dtIn))
dtOut[[paste0(i, j)]] <- data.table(paste0(c(dtIn[i, V1], dtIn[j, V1]), collapse = ""),
dtIn[i, V2] + dtIn[j, V2])
dtOut <- rbindlist(dtOut)
最佳答案
双循环建议在此处使用outer
:
dtIn[,list(outer(V1,V1,paste0),outer(V2,V2,"+"))]
# V1 V2
# 1: AA 1.2
# 2: BA 0.9
# 3: CA 0.7
# 4: AB 0.9
# 5: BB 0.6
# 6: CB 0.4
# 7: AC 0.7
# 8: BC 0.4
# 9: CC 0.2