2015-05-18 20 views
2

我有一個由一系列成對列組成的數據幀。這是一個小例子。在大型數據幀中對列之間的值進行平均

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) 

然而,我將尋找數據幀將是相當大的,從而某種形式的應用功能對於在每個配對集合中迭代執行此操作來說是理想的。我發現了一個類似的問題Is there a R function that applies a function to each pair of columns?,但我似乎無法將其應用於我自己的數據集。

任何幫助將不勝感激,謝謝你提前。

+0

你需要得到的平均值(摘要)作爲一個單獨的數據集或如例列? – 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

相關問題