r - 使用 R 将函数应用于数据框中两列的每个组合

标签 r dataframe multiple-columns apply

我想将函数 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

最佳答案

在你的情况下,我会转换为矩阵(当所有列都是数字类时,没有理由将其保留为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

关于r - 使用 R 将函数应用于数据框中两列的每个组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371794/

相关文章:

r - 将数据框列表转换为具有列表名称的单个数据框

r - 如何在R中将一个数据集分割成多个数据集

python - 如何仅对 Pandas 数据框中的某些列进行排序?

css - 难以创建具有多列的 CSS 菜单

对于数据框中不存在的列返回 NA 或 NULL

r - Base R 中的图例 : Can fill refrain from drawing boxes on some lines? 可以填充覆盖整个符号的绘制框吗?

python - 创建 1 x n pandas DataFrame

python - 如何根据列中唯一值的数量从字典中删除/删除数据帧?

html - 在所有浏览器中使用 column-count 时避免 paragraf 被破坏

html - 停止 CSS3 列分解段落