我有一个如下所示的数据框:
df <- data.frame(Name = c("BB", "AA", "AA", "BB", "DD", "AA", "DD", "DD", "CC"),
string = c("a11", "a120", "a120", "a8", "a45", "a11", "a140", "a8", "a45") ,
value = rnorm(9, mean = 0, 1))
Name string value
BB a11 0.5912728
AA a120 0.5885065
AA a120 -0.5287264
BB a8 0.6932831
DD a45 -0.2892612
AA a11 1.0441365
DD a140 -0.5091612
DD a8 -0.3358695
CC a45 0.5598616
我想对df重新排序,以便根据数字部分pf字符串列对其进行排序。
我正在尝试以下命令:
string <- unique(as.character(df$string))
sorted.ind <- sort(as.numeric(gsub('a', '', string)), index.return = T)$ix
df$string <- factor(df$string, levels = string[sorted.ind])
但是它也不对表重新排序。
这是我想要的输出:
Name string value
BB a8 0.6932831
DD a8 -0.3358695
BB a11 0.5912728
AA a11 1.0441365
DD a45 -0.2892612
CC a45 0.5598616
AA a120 0.5885065
AA a120 -0.5287264
DD a140 -0.5091612
有人知道我该如何修正我的代码?
谢谢
您可以使用stringr::str_order()
(或stringi::stri_order()
)将numeric
参数设置为TRUE
:
library(stringr)
df[str_order(df$string, numeric = TRUE), ]
Name string value
4 BB a8 1.74351093
8 DD a8 0.41802240
1 BB a11 0.61559079
6 AA a11 0.63900177
5 DD a45 -1.87046411
9 CC a45 -0.44398027
2 AA a120 -0.84459958
3 AA a120 0.01800482
7 DD a140 -0.88140002