gpt4 book ai didi

r - 在 R 中按字母顺序排列字母数字列名称

转载 作者:行者123 更新时间:2023-12-04 00:50:44 25 4
gpt4 key购买 nike

我在 rstudio 上工作。我有一个列名的数据框,如下所示:USA10 USA2 USA31 UK10 UK2 UK48 UK31 FRA31 FRA2 等等。我如何排列列名,以便它们按照逆字母顺序但递增的数字顺序开始,即 USA1 USA2 ... UK1 UK2 ... FRA1 FRA2 等等。我试过select(order(colnames(data),decreasing = TRUE))但是这会忽略列名的数字部分。我希望列名按字母和数字排序。谢谢!

最佳答案

基本逻辑是需要将文本和数字部分分开,然后调用排序函数。我将使用您描述的列制作一个示例数据集:

x <- scan(text="USA10 USA2 USA31 UK10 UK2 UK48 UK31 FRA31 FRA2", what="")
df <- as.data.frame(as.list(x), col.names=x)
在基础 R 中:
ords <- strcapture("([A-Z]*)([0-9]*)", colnames(df), proto=list(char="",num=1L))
df[order(-xtfrm(ords$char), ords$num)]
# USA2 USA10 USA31 UK2 UK10 UK31 UK48 FRA2 FRA31
#1 USA2 USA10 USA31 UK2 UK10 UK31 UK48 FRA2 FRA31
或 tidyverse:
df %>% select(
data.frame(x=colnames(df)) %>%
separate(x, sep="(?<=[A-Z])(?=[0-9])", into=c("char","num"),
remove=FALSE, convert=TRUE) %>%
arrange(desc(char), num) %>% pull(x)
)
# USA2 USA10 USA31 UK2 UK10 UK31 UK48 FRA2 FRA31
#1 USA2 USA10 USA31 UK2 UK10 UK31 UK48 FRA2 FRA31

关于r - 在 R 中按字母顺序排列字母数字列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66773241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com