2015-06-09 39 views
0

我對在R.應用函數迭代地跨越數據幀

我跨越數據集應用的功能的兩部分的問題)首先,我有想要被組合和迭代配對2個的數據幀,所以類似cbind函數的東西會將每個數據框的第1列彼此相鄰,然後排列第2列,依此類推。在下面的例子中,我想要一個結合df1和df2的輸出,其中列順序是eg1,eg4,eg2,eg5,eg3,eg6。

eg1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1)) 
eg2 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1)) 
eg3 <- as.data.frame(matrix(sample(0:750, 36*10, replace=TRUE), ncol=1)) 
df1 <- cbind(eg1,eg2,eg3) 
eg4 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1)) 
eg5 <- as.data.frame(matrix(sample(0:100, 36*10, replace=TRUE), ncol=1)) 
eg6 <- as.data.frame(matrix(sample(0:350, 36*10, replace=TRUE), ncol=1)) 
df2 <- cbind(eg4,eg5,eg6) 

我知道做這個(下圖)的手工方式,但結合更大的數據集,我想知道是否有實現這一目標的一個更有效的方法時,這不會是理想的? (ii)在此之後,我想根據相應的偶數列中的7個最高值在每個奇數列中輸出7個值。作爲一個例子,對於前兩列...

df4 <- df3[,1:2] 
High_7 <- tail(df4[order(df4[,2]),],7)#Highest 7 values in even column 
High_7 <- High_7[,1] #Select odd column values 

但是使用這個跨數據集,也許通過某種形式的應用功能的一個例子是有效得多。

回答

0

您反覆組合這兩個dataframes的的cols的第一個問題(注意,這只是工作,如果雙方dataframes的名稱是唯一的,他們是不是在你的OP):

df3 <- Reduce(cbind, 
     Map(function(x, y) cbind(df1[x], df2[y]), names(df1), names(df2))) 

第二部分我會用這樣的:

results <- sapply(seq(1,ncol(df3),2), 
         function(i) df3[order(df3[,i+1], decreasing = TRUE), ][1:7,i]) 

,如果你想要的結果是一個data.frame只是做:

results <- data.frame(results)