R:按字母数字列对数据框中的所有列进行排序

问题描述 投票:0回答:1

我想用包含字母数字数据的列对R中数据帧的所有列进行排序。这是一个示例数据帧:

R> dd <- data.frame(b = c("Hi", "Med", "Hi", "Low"),
                 x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
                 z = c("A1", "A3", "A10", "A2"))

1   Hi  A   8   A1
2   Med D   3   A3
3   Hi  A   9   A10
4   Low C   9   A2

我想对z列上的整个数据框进行排序。所需的输出看起来像这样-列中的信息保持一致:

1   Hi  A   8   A1
2   Low C   9   A2
3   Med D   3   A3
4   Hi  A   9   A10

这里是我到目前为止尝试过的仍然无效的方法:

[Method 1:“ A10”排序不正确

R> dd<- dd[with(dd, order(z)), ]
R> View(dd)
1   Hi  A   8   A1
4   Hi  A   9   A10
2   Low C   9   A2
3   Med D   3   A3

Method 2:未执行排序

R> library(gtools)
R> dd$z = factor(dd$z, levels = gtools::mixedsort(dd$z))
R> View(dd)
1   Hi  A   8   A1
2   Med D   3   A3
3   Hi  A   9   A10
4   Low C   9   A2

方法3:未执行排序

R> library(stringr);
R> dd$z = factor(dd$z, levels = str_sort(dd$z, numeric=TRUE))
R> View(dd)
1   Hi  A   8   A1
2   Med D   3   A3
3   Hi  A   9   A10
4   Low C   9   A2
r sorting dataframe alphanumeric
1个回答
0
投票

这里是mixedorder的选项

library(dplyr)
dd <- dd %>% 
         arrange(gtools::mixedorder(z))
dd
#   b x y   z
#1  Hi A 8  A1
#2 Low C 9  A2
#3 Med D 3  A3
#4  Hi A 9 A10
© www.soinside.com 2019 - 2024. All rights reserved.