Например, с учетом фреймов данных:
> df1
a b
1 1 3
2 2 4
и
> df2
x y z
1 10 12 14
2 11 13 15
и выполняя операцию сложения для каждой пары столбцов из df1 и df2, я хотел бы произвести:
> df3
ax bx ay by az bz
1 11 13 13 15 15 17
2 13 15 15 17 17 19
Я написал следующий код, который выполняет эту работу, но мне интересно, есть ли лучший способ сделать это.
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)
Спасибо,
Zach