在数据框中迭代应用函数

Apply function iteratively across a dataframe

我有一个关于在 R 中跨数据集应用函数的两部分问题。

i) 首先,我有 2 个数据框,我想将它们组合并迭代配对,这样 cbind 函数之类的东西会将每个数据框的第一列彼此相邻排列,然后是第二列列等。在下面的示例中,我想要一个组合 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)

我知道手动执行此操作的方法(如下),但是在合并更大的数据集时这并不理想,我想知道是否有更有效的方法来实现此目的?

df3 <- cbind(df1,df2)
df3 <- df3[,c(1,4,2,5,3,6)]

(ii) 在此之后,我想根据相应偶数列中的 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

但是在整个数据集中使用它的示例,也许通过某种形式的应用函数会更有效。

关于迭代组合两个数据帧的 cols 的第一个问题(请注意,这仅在两个数据帧的名称都是唯一的情况下有效,它们不在您的 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)