在数据帧上迭代应用函数

时间:2015-06-09 11:13:31

标签: r dataframe tail cbind

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

i)首先,我有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)

我知道这样做的手动方式(下面),但是在组合更大的数据集时这并不理想,我想知道是否有更有效的方法来实现这一目标?

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

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

1 个答案:

答案 0 :(得分: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)