如何在R中按行对数据进行排序并拆分成多个数据帧?

时间:2016-06-17 09:09:34

标签: r sorting dataframe split

假设我有一个数据框:

       Col1  Col2  Col3  Col4  Col5  Col6

 Row1    1     0     20     4     8    23
 Row2    0     1      3    61     2     1
 Row3    1     1      2     4     3    54

我想将此数据帧排序为多个数据帧,因为我也想要列信息。

       Col6  Col3  Col5  Col4  Col1  Col2
 Row1    23    20     8     4     1     0

       Col4  Col3  Col5  Col2  Col6  Col1
 Row2    61     3     2     1     1     0

       Col6  Col4  Col5  Col3  Col1  Col2
 Row3    54     4     3     2     1     1

1 个答案:

答案 0 :(得分:0)

正如Eric Lecoutre在评论中指出的那样,您可以在这种情况下使用lapply()。有不同的方法可以做到这一点,我举两个例子。

使用函数order()在两个示例中完成排序。如何通过一个例子最简单地理解它的工作原理:

x <- c(3, 4, 1, 2)
x[order(x)]
## [1] 1 2 3 4
x[order(x, decreasing = TRUE)]
## [1] 4 3 2 1

因此,order()不返回有序向量,而是返回可用于对向量进行排序的索引。

现在解决您的实际问题。您可以按如下方式应用行指数:

lapply(1:nrow(df), function(row) df[row, order(df[row, ], decreasing = TRUE)])

或者您可以将数据框拆分为一行数据框并应用于该列表:

lapply(split(df, 1:nrow(df)), function(row) row[, order(row, decreasing = TRUE)])