假设我下面有数据框。如何将某些任意函数应用于数据帧子集中的所有成对的行组合?例如,如何只为标记为“红色..”的列计算标记为(alpha,beta,gamma)的行的每种组合的平均值?因为这只是一个例子,所以我只希望找到3个数字的成对组合:(1、0、6)和(7、2、10),(1、0、6)的平均值&(6,3,11)和(7,2,10)&(6,3,11)。但是我正在寻找可以应用于特定子集中的更多行/列的代码,该代码可能是成百上千的成对组合(无重复/重复组合)。谢谢!
df <- read.csv("test.csv", row.names = 1, header = TRUE)
df
red.1 red.2 red.3 yellow.1 yellow.2
alpha 1 0 6 56 59
beta 7 2 10 59 64
gamma 6 3 11 100 105
pi 1009 2104 290 6 5
您可以编写函数:
get_average <- function(data, row, col_pattern) {
sapply(combn(asplit(data[row, grep(col_pattern, names(data))], 1),
2, simplify = FALSE), function(x) mean(unlist(x)))
}
然后传递行名和列名的模式:
get_average(df, c('alpha', 'beta', 'gamma'), 'red')
#[1] 4.3 4.5 6.5