2015-05-18 7 views
2

У меня есть dataframe, состоящий из серии парных столбцов. Вот небольшой пример.Усреднение значений между парными столбцами в большом кадре данных

df1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1)) 
df2 <- as.data.frame(rep(1:12, each=30)) 
df3 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1)) 
df4 <- as.data.frame(c(rep(5:12, each=30),rep(1:4, each=30))) 
df5 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1)) 
df6 <- as.data.frame(c(rep(8:12, each=30),rep(1:7, each=30))) 
Example <- cbind(df1,df2,df3,df4,df5,df6) 

То, что я хотел бы сделать, это найти среднее значение для нечетных чисел столбцов (df1, DF3, DF5) на основе значений в соседнем столбце, так что в этом примере я бы три набора средних для каждого значения в диапазоне от 1 до 12 лет я сумел применить функцию для конкретной пары колонн ...

Example_two <- cbind(df1,df2) 
colnames (Example_two) <- c("x","y") 
tapply(Example_two$x, Example_two$y, mean) 

Однако dataframe я буду смотреть на будет значительно больше, поэтому некоторые формы применять функцию было бы идеально, чтобы выполнять это итеративно через каждый парный набор. Я нашел аналогичную проблему Is there a R function that applies a function to each pair of columns?, но я не могу применить ее к своему собственному набору данных.

Любая помощь будет очень признательна, заблаговременно.

+0

вам нужно, чтобы получить среднее значение (резюме) в виде отдельного набора данных или столбцов в примере Do? – akrun

+0

Отдельный набор данных, желательно, спасибо. –

ответ

2

Попробуйте

mapply(function(x,y) tapply(x,y, FUN=mean) , 
    Example[seq(1, ncol(Example), 2)], Example[seq(2, ncol(Example), 2)]) 

Или вместо того, чтобы просто использовать seq(1, ncol(Example), 2)c(TRUE, FALSE) и c(FALSE, TRUE) для второго случая

+0

Блестяще благодарю вас! –

+0

@JamesWhite Рад знать, что он работает. Это можно сделать несколькими способами, но я думал, что «mapply» будет проще – akrun