将函数应用于数据帧子集中的所有行的成对组合

问题描述 投票:0回答:1

假设我下面有数据框。如何将某些任意函数应用于数据帧子集中的所有成对的行组合?例如,如何只为标记为“红色..”的列计算标记为(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
r function dataframe apply
1个回答
0
投票

您可以编写函数:

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
© www.soinside.com 2019 - 2024. All rights reserved.