R中的重新排序和重塑列[重复]

Posted

技术标签:

【中文标题】R中的重新排序和重塑列[重复]【英文标题】:Reordering and reshaping columns in R [duplicate] 【发布时间】:2011-10-31 23:49:08 【问题描述】:

可能重复:How to sort a dataframe by column(s) in R

我有一个如下所示的数据集:

x       y     z
1.      1     0.2
1.1     1     1.5
1.2     1     3.
1.      2     8.1
1.1     2     1.0
1.2     2     0.6

我想要的是首先将数据集组织为 x 的函数,然后按递增顺序组织为 y 的函数,这样

x       y      z 
1.      1      0.2
1.      2      8.1
1.1     1      1.5
1.1     2      1.
1.2     1      3.
1.2     2      0.6

我知道 apply、mapply、tapply 等函数会重新组织数据集,但我必须承认我并不真正了解它们之间的区别,也不真正了解如何应用哪个以及何时应用。

感谢您的建议。

【问题讨论】:

相关问题:***.com/q/6769703/602276和***.com/q/5602525/602276 各种排序方式比较:***.com/questions/1296646/… 【参考方案1】:

您可以使用order 函数对数据进行排序。不需要任何apply家庭功能。

假设您的数据位于名为 df 的 data.frame 中:

df[order(df$x, df$y), ]
    x y   z
1 1.0 1 0.2
4 1.0 2 8.1
2 1.1 1 1.5
5 1.1 2 1.0
3 1.2 1 3.0
6 1.2 2 0.6

请参阅?order 以获得更多帮助。


附带说明:重塑通常是指改变 data.frame 的形状,例如将其从宽格式转换为高格式。这不是这里需要的。

【讨论】:

重新排序我的数据集的非常简单有效的方法。感谢您的快速回答和建议,让我了解 order()、reshape() 等之间的区别......【参考方案2】:

您也可以为此使用plyr 中的arrange() 函数。将desc() 中的变量包裹起来,你想对另一个方向进行排序。

> library(plyr)
> dat <- head(ChickWeight)
> arrange(dat,weight,Time)
  weight Time Chick Diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1

如果速度在您的应用程序中很重要,这是执行此操作的最快方法,并且仍然可读。这里的基准: How to sort a dataframe by column(s)?

【讨论】:

以上是关于R中的重新排序和重塑列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按任意指定顺序重新排序R中的列名[重复]

在R中的数据帧中动态地重新排序列

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]