【问题标题】:How to sort a data frame by row in R and split into muliple data frames?如何在 R 中逐行对数据帧进行排序并拆分为多个数据帧?
【发布时间】:2016-06-17 09:09:33
【问题描述】:

假设我有一个数据框:

       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

【问题讨论】:

  • 了解申请和订购。
  • apply(df,1,order) 存在问题,因为变量名称将不一致。如果需要保留顺序的变量名称,则确实是拆分为单独的 data.frames 的唯一方法,即通过列表进行管理。一种方法可以是:listdf=split(df,1:nrow(df),然后使用 lapply 重新排序每个 data.frame。
  • 看你的问题,你似乎从来没有接受过你的问题的答案。请养成习惯,通过单击旁边出现的复选标记来接受您认为最有用的答案。这将通过向其他访问者显示答案有所帮助来帮助他们。它会通过给予两个声望点来帮助回答者和你自己。您还可以查看tour,了解 StackOverflow 的工作原理。
  • 我使用了一种时尚的风格,并且看不到赞成票和复选标记。感谢您指出这一点。

标签: r sorting dataframe split


【解决方案1】:

正如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)])

【讨论】:

  • 感谢您指定拆分为数据框列表。在我原来的原始数据框中,我引用了一些名称的行。但是,当我尝试您的代码时,这些行名似乎已经在列表中丢失了。我试过这个代码 - q3&lt;-lapply(split(q, 1:nrow(q)), function(row) row[, order(row, decreasing = TRUE)],function(x){ row.names(x)&lt;-as.character(rownames(x)[]); x}) ,但是我得到这个错误 - Error in FUN(X[[i]], ...) : unused argument (function (x) { row.names(x) &lt;- as.character(rownames(x)[]) x })
  • 我得到的数据框同时具有行名和列名,所以我似乎无法重现您的问题。错误消息是由于您无法将两个函数传递给 lapply(). Look at ?lapply` 以更好地了解它的工作原理。
猜你喜欢
  • 2020-12-14
  • 2013-03-21
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多