gpt4 book ai didi

r - 从 data.table 的一列进行组合,并从相应的列中求和

转载 作者:行者123 更新时间:2023-12-04 09:40:51 24 4
gpt4 key购买 nike

在:

   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

用双 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)

最佳答案

您可以使用 CJ 将每一列与其自身“交叉连接”:

dtIn[, lapply(.SD, function(x) 
Reduce(if (class(x)=="character") paste0 else `+`, CJ(x,x)))]

这与 outer 相比有几个优点:

  • 它不涉及将矩阵(从外部)强制转换回向量。
  • 不需要重复输入变量名。
  • 如果 dtIn 列有名称(默认值除外),它们将被保留。
  • 它可以相当干净地扩展(例如,CJ(x,x,x) 以获得 3x 组合)。

.


在 base 中,这可以通过 expand.grid 来完成,它与 CJ 基本相同:

DF = data.frame(dtIn)
data.frame(lapply(DF, function(x)
Reduce(if (class(x)=="character") paste0 else `+`, expand.grid(x,x))))

关于r - 从 data.table 的一列进行组合,并从相应的列中求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com