【问题标题】:Sorting rows alphabetically按字母顺序对行进行排序
【发布时间】:2011-08-29 03:56:41
【问题描述】:

我的数据看起来像,

A    B    C    D
B    C    A    D
X    Y    M    Z
O    M    L    P

如何对行进行排序以获得类似的东西

A    B    C    D
A    B    C    D
M    X    Y    Z
L    M    O    P

谢谢,

【问题讨论】:

    标签: r sorting apply


    【解决方案1】:

    你尝试了什么?这真的很简单,很容易通过一个简单的循环来解决。

    > s <- x
    > for(i in 1:NROW(x)) {
    +   s[i,] <- sort(s[i,])
    + }
    > s
      V1 V2 V3 V4
    1  A  B  C  D
    2  A  B  C  D
    3  M  X  Y  Z
    4  L  M  O  P
    

    【讨论】:

      【解决方案2】:
      t(apply(DF, 1, sort))
      

      t() 函数是必需的,因为使用 apply 系列函数的行操作会以列优先顺序返回结果。

      【讨论】:

      • +1 用于紧凑的解决方案,并解释为什么需要 t()
      • 除了解释不太正确 - 这不是列的主要顺序,而是在开始时添加了新维度,而不是保留在原来的位置。
      • 也许我不理解我们的区别。 apply() 正在一次构建一个矩阵,对吗?
      【解决方案3】:

      还没有plyr 的答案?!

      foo <- matrix(sample(LETTERS,10^2,T),10,10)
      
      library("plyr")
      
      aaply(foo,1,sort)
      

      除了不需要t()之外,与 DWins 的答案完全相同

      【讨论】:

        【解决方案4】:

        Martin Morgan 在Fastest way to select i-th highest value from row and assign to new column 中的另一个快速基础 R 选项是

        matrix(a[order(row(a), a, method="radix")], ncol=ncol(a))
        

        时间可查here

        【讨论】:

          猜你喜欢
          • 2017-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-30
          • 2013-11-09
          • 2022-01-18
          相关资源
          最近更新 更多