有没有一种很好的方法对两个数据帧的所有列配对进行操作?

Zac*_*ach 1 r

例如,给定数据框:

> df1
  a b
1 1 3
2 2 4
Run Code Online (Sandbox Code Playgroud)

> df2
   x  y  z
1 10 12 14
2 11 13 15
Run Code Online (Sandbox Code Playgroud)

并在df1和df2的每一对列上进行加法运算,我想生成:

> df3
  ax bx ay by az bz
1 11 13 13 15 15 17
2 13 15 15 17 17 19
Run Code Online (Sandbox Code Playgroud)

我编写了以下代码来完成这项工作,但我想知道是否有更好的方法来完成它.

df1 <- data.frame(a=1:2, b=3:4)
df2 <- data.frame(x=10:11, y=12:13, z=14:15)

byColumnAdditionAllPairs <- function(df1, df2) {

    doOp <- function(x, df1, df2, pairs) { 
        i <- pairs[x,1]; # ith column of df1
        j <- pairs[x,2]; # jth column of df2

        # add paired columns
        tmp <- df1[i] + df2[j];

        # set new column name
        names(tmp)[1] <- paste(names(df1)[i], names(df2)[j], sep="");

        # return column
        tmp
    }

    # generate column pairings
    pairs <- expand.grid(1:length(df1), 1:length(df2))

    # for each column pair, doOp
    data.frame(sapply(1:nrow(pairs), doOp, df1, df2, pairs))
}

df3 <- byColumnAdditionAllPairs(df1, df2)
Run Code Online (Sandbox Code Playgroud)

谢谢,扎克

Pra*_*ani 5

这是一种方式.它包含一些其他答案的元素......

z <- outer(colnames(df1), colnames(df2), function(c1,c2) df1[,c1] + df2[,c2])
colnames(z) <- outer(colnames(df1), colnames(df2), paste, sep = '')     

> z
  ax bx ay by az bz
1 11 13 13 15 15 17
2 13 15 15 17 17 19
Run Code Online (Sandbox Code Playgroud)