这个问题在这里已经有了答案:
How to sort a dataframe by multiple column(s)
(19 个回答)
6年前关闭。
我正在整理 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 列,我不明白为什么?
最佳答案
dplyr
的一种解决方案:
library(dplyr)
df %>%
group_by(x) %>%
arrange(c)
或者正如@Akrun 在下面的评论中提到的那样
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 - 如何按字母顺序对数据框的行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28716143/