繁体   English   中英

在 r 中订购字母数字变量

[英]ordering alpha numeric variable in r

我想订购一个基于字母数字变量的数据框。 我的数据集如下所示:

sample.data <- data.frame(Grade=c(4,4,4,4,3,3,3,3,3,3,3,3),
                          ItemID = c(15,15,15,15,17,17,17,17,16,16,16,16),
                          common.names = c("15_AS_SA1_Correct","15_AS_SA10_Correct","15_AS_SA2_Correct","15_AS_SA3_Correct",
                                            "17_AS_2_B2","17_AS_2_B1","17_AS_5_C1","17_AS_4_D1",
                                           "16_AS_SA1_Negative","16_AS_SA11_Prediction","16_AS_SA12_UnitMeaning","16_AS_SA3_Complete"))

> sample.data
   Grade ItemID           common.names
1      4     15      15_AS_SA1_Correct
2      4     15     15_AS_SA10_Correct
3      4     15      15_AS_SA2_Correct
4      4     15      15_AS_SA3_Correct
5      3     17             17_AS_2_B2
6      3     17             17_AS_2_B1
7      3     17             17_AS_5_C1
8      3     17             17_AS_4_D1
9      3     16     16_AS_SA1_Negative
10     3     16  16_AS_SA11_Prediction
11     3     16 16_AS_SA12_UnitMeaning
12     3     16     16_AS_SA3_Complete

我需要按GradeItemID排序,然后按包含字母数字的common.names变量。

我用这个:

sample.data.ordered <- sample.data %>%
  arrange(Grade, ItemID,common.names)

但它不适用于整套。

我想要的 output 是:

> sample.data.ordered
   Grade ItemID           common.names
1      3     16     16_AS_SA1_Negative
2      3     16     16_AS_SA3_Complete
3      3     16  16_AS_SA11_Prediction
4      3     16 16_AS_SA12_UnitMeaning
5      3     17             17_AS_2_B1
6      3     17             17_AS_2_B2
7      3     17             17_AS_4_D1
8      3     17             17_AS_5_C1
9      4     15      15_AS_SA1_Correct
10     4     15      15_AS_SA2_Correct
11     4     15      15_AS_SA3_Correct
12     4     15     15_AS_SA10_Correct

有什么想法吗? 谢谢!

使用orderbase R解决方案以及更复杂的common.names过程涉及gsub 、正则表达式和多个反向引用,以匹配可以对列进行排序的字符串中的数字:

sample.data[order(sample.data$Grade, 
              sample.data$ItemID, 
              as.numeric(gsub(".*(SA|AS_)(\\d+)_(\\w)?(\\d)?.*", "\\2\\4", sample.data$common.names))),]
   Grade ItemID           common.names
9      3     16     16_AS_SA1_Negative
12     3     16     16_AS_SA3_Complete
10     3     16  16_AS_SA11_Prediction
11     3     16 16_AS_SA12_UnitMeaning
6      3     17             17_AS_2_B1
5      3     17             17_AS_2_B2
8      3     17             17_AS_4_D1
7      3     17             17_AS_5_C1
1      4     15      15_AS_SA1_Correct
3      4     15      15_AS_SA2_Correct
4      4     15      15_AS_SA3_Correct
2      4     15     15_AS_SA10_Correct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM