0

我有一个关于在 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 个最高值在每个奇数列中输出 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

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

4

1 回答 1

0

对于迭代组合两个数据帧的 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)
于 2015-06-09T11:22:34.003 回答