【问题标题】:Applying a function to every combination of two columns in a dataframe using R使用 R 将函数应用于数据框中两列的每个组合
【发布时间】:2025-12-03 18:05:03
【问题描述】:

我想将函数myfoo应用于数据帧mydf中两列的所有可能组合,并以矩阵格式myoutput获得结果。

考虑以下数据框,

# Example dataframe
mydf <- data.frame(var1 = 1:10, var2 = 11:20, var3 = 21:30)
head(mydf)

# var1 var2 var3
# 1    11   21
# 2    12   22
# 3    13   23
# 4    14   24
# 5    15   25

我想将以下函数应用于两列的每个可能组合,

# Example function
myfoo <- function(varA, varB) sum(varA * varB)

myfoo(var1, var2)
# [1] 935

为了得到这个输出。

# Desired output
myoutput <- matrix(c(0, 935, 1485, 935, 0, 4035, 1485, 4035, 0), 3, dimnames = list(names(mydf), names(mydf)))
myoutput

#      var1 var2 var3
# var1    0  935 1485
# var2  935    0 4035
# var3 1485 4035    0

【问题讨论】:

    标签: r dataframe multiple-columns apply


    【解决方案1】:

    在您的情况下,我将转换为矩阵(当所有列都是数字类时,没有理由将其保留为 data.frame)并运行编译后的 crossprod 函数,该函数执行矩阵叉积。

    m <- as.matrix(mydf)
    res <- crossprod(m, m)
    diag(res) <- 0 # You can probably skip that part
    res
    #      var1 var2 var3
    # var1    0  935 1485
    # var2  935    0 4035
    # var3 1485 4035    0
    

    【讨论】:

    • 优雅高效!完美:)