如何按字母顺序对数据框的行进行排序? [复制]

Posted

技术标签:

【中文标题】如何按字母顺序对数据框的行进行排序? [复制]【英文标题】:How to sort alphabetically rows of a data frame? [duplicate] 【发布时间】:2015-04-27 06:38:57 【问题描述】:

我想按字母顺序对c 排序if x[i]== x[i+1]。我使用了order() 函数,但它也更改了x 列。我想订购整行:

 best <- function(state)
 HospitalName<-vector()
 StateName<-vector()
 HeartAttack<-vector()

  k<-1

  outcome<-read.csv("outcome-of-care-measures.csv",colClasses= "character")

 temp<-(outcome[,c(2,7,11,17,23)])

for (i in 1:nrow(temp))
 if(identical(state,temp[i,2])==TRUE)
    HospitalName[k]<-temp[i,1]
    StateName[k]<-temp[i,2]
    HeartAttack[k]<-as.numeric(temp[i,4])
    k<-k+1
     
    frame<-data.frame(cbind(HospitalName,StateName,HeartAttack))


  library(dplyr)
  frame %>%
  group_by(as.numeric(as.character(frame[,3]))) %>%
  arrange(frame[,1])
    

  Output:
                               HospitalName StateName HeartAttack
 1              FORT DUNCAN MEDICAL CENTER        TX         8.1
 2         TOMBALL REGIONAL MEDICAL CENTER        TX         8.5
 3        CYPRESS FAIRBANKS MEDICAL CENTER        TX         8.7
 4                  DETAR HOSPITAL NAVARRO        TX         8.7
 5                  METHODIST HOSPITAL,THE        TX         8.8
 6         MISSION REGIONAL MEDICAL CENTER        TX         8.8
 7  BAYLOR ALL SAINTS MEDICAL CENTER AT FW        TX         8.9
 8       SCOTT & WHITE HOSPITAL-ROUND ROCK        TX         8.9
 9         THE HEART HOSPITAL BAYLOR PLANO        TX           9
 10    UT SOUTHWESTERN UNIVERSITY HOSPITAL        TX           9
..                                    ...       ...         ...
Variables not shown: as.numeric(as.character(frame[, 3])) (dbl)

输出不包含 HeartAttack 列,我不明白为什么?

【问题讨论】:

简单地可以做如下 x[order(x$c), , drop = FALSE] x 是你的数据的名字,c 是你想要排名的列等等 @Nemo 这只会订购 c 列。这不是 OP 想要的。 @LyzanderR 我明白了,但是,这似乎是一个重复的问题:-) 这不是一个重复的问题。仅当列 x 具有顺序相同的编号时,OP 才希望对列 c 进行排序。我投票决定重新打开它。 @LyzandeR OP 希望先按“x”排序数据,然后按“c”排序。在我发布的链接中,数据也按两个变量排序(按“z”(降序)和“b”)。我看不到这里的根本区别。在不同的答案中,还有一个dplyr 替代方案。 【参考方案1】:

dplyr 的一个解决方案:

library(dplyr)
df %>%
  group_by(x) %>%
  arrange(c)

或者正如@Akrun 在下面的 cmets 中提到的那样

df %>%
  arrange(x,c)

如果您对分组不感兴趣。取决于你想要什么。

输出:

Source: local data frame [5 x 2]
Groups: x

  x c
1 2 A
2 2 D
3 3 B
4 3 C
5 5 E

在基础 R 中有另一种解决方案,但它仅在您的 x 列按原样排序或您不介意更改其顺序时才有效:

> df[order(df$x, df$c), , drop = FALSE]
  x c
2 2 A
1 2 D
4 3 B
3 3 C
5 5 E

【讨论】:

但是 R 找不到 dplyr 是的,你需要先用install.packages('dplyr')安装它,然后用library(dplyr)加载它才能工作。 需要贡献的包,不是基础 R. @GeorgeDontas 为什么有人不能使用外部包?这个问题在任何地方都没有提到base R。这不是投反对票的理由......而且 OP 不希望对列进行简单的排序。 @GeorgeDontas OP希望根据列 x 对列 c 进行排序,即组排序。我不明白为什么我不应该使用 dplyr。你能解释一下吗?

以上是关于如何按字母顺序对数据框的行进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据最后一次观察而不是字母顺序对情节进行排序? [复制]

按字母顺序对 c 字符串数组进行排序

如何按特定顺序对 .then() 调用进行排序? [复制]

如何按自定义顺序对 JavaScript 中的数组进行排序? [复制]

如何从 Python 列表中删除重复项并保持顺序? [复制]

LinkedList按字母顺序排序[复制]