我需要根据DF
列中的相应名称对数据框(DF
)中的行重新排序。
我的DF
看起来像这样
beta se hr m
0.1 0.01 1 xl.vl.pl
0.2 0.02 2 l.vl.ce
0.3 0.03 3 s.vl.fc
0.4 0.04 4 idl.p
0.1 0.01 1 m.vl.pl
0.2 0.02 2 xs.vl.ce
0.3 0.03 3 l.vl.fc
0.4 0.04 4 idl.p
0.4 0.04 4 xxl.vl.pl
我想根据专栏m
重新排序,以便
0.4 0.04 4 xxl.vl.pl
0.1 0.01 1 xl.vl.pl
0.2 0.02 2 l.vl.ce
0.3 0.03 3 l.vl.fc
0.1 0.01 1 m.vl.pl
0.4 0.04 4 idl.p
0.4 0.04 4 idl.p
0.3 0.03 3 s.vl.fc
0.2 0.02 2 xs.vl.ce
我感谢任何帮助和建议。
答案 0 :(得分:5)
您可以使用与m的第一部分相对应的有序因子(您可以通过拨打sub
来检索),根据您的意愿(xxl, xl, l, m, idl ,s, xs
)订购,然后您可以订购data.frame使用它:
DF[order(factor(sub("([^.]+)\\..+", "\\1", DF$m),
levels=c("xxl", "xl", "l", "m", "idl" ,"s", "xs"), ordered=TRUE)), ]
# beta se hr m
# 9 0.4 0.04 4 xxl.vl.pl
# 1 0.1 0.01 1 xl.vl.pl
# 2 0.2 0.02 2 l.vl.ce
# 7 0.3 0.03 3 l.vl.fc
# 5 0.1 0.01 1 m.vl.pl
# 4 0.4 0.04 4 idl.p
# 8 0.4 0.04 4 idl.p
# 3 0.3 0.03 3 s.vl.fc
# 6 0.2 0.02 2 xs.vl.ce
答案 1 :(得分:0)
orderLevels<-c("xxl","xl","l","m","idl","s","xs")
library(dplyr)
DF<-DF %>% mutate(m2 = match(sapply(strsplit(DF$m, "[.]"), function(x) x[1]), orderLevels)) %>% arrange(m2) %>% select(-m2)