【问题标题】:How to sort a character vector that has numbers in it [duplicate]如何对其中包含数字的字符向量进行排序[重复]
【发布时间】:2020-09-14 23:21:26
【问题描述】:

我有一个数据框,我正在尝试按其中包含数字的字符进行排序。

该列看起来像这样(Team1,Team2,Team3,Team4,Team5,....Team10),当我对其进行排序时,它会将其排序为(Team1,Team10,Team2 ....)。我在该列中使用了数百个不同的术语,所以有没有一种方法可以对列进行排序,以便将 Team2 视为比 Team3 更早的值?

【问题讨论】:

  • 你可以使用df1$col1 <- gtools::mixedsort(df1$col1)
  • 或者,您可以提取团队编号并使用它进行排序(例如df %>% mutate(team_no = str_extract(col1, "\\d+")) %>% arrange(team_no)

标签: r dplyr


【解决方案1】:

使用基础 R:

set.seed(357)
xy <- paste("Team", sample(1:10), sep = "")

按“笨方法”排序。

xy.sort <- sort(xy)
xy.sort

[1] "Team1"  "Team10" "Team2"  "Team3"  "Team4"  "Team5"  "Team6"  "Team7"  "Team8"  "Team9" 

如果您提取数字并将其转换为数字,则可以使用它们对原始数据帧进行排序。

get.nums <- gsub("^Team(\\d+)$", replacement = "\\1", x = xy)
xy[order(as.numeric(get.nums))]

[1] "Team1"  "Team2"  "Team3"  "Team4"  "Team5"  "Team6"  "Team7"  "Team8"  "Team9"  "Team10"

【讨论】:

  • 绝对适用于这个例子,但这取决于输入向量的“alpha”部分的一致性......你好,顺便说一句:-)
  • @A5C1D2H2I1M1N2O1R2T1 整个世界都是边缘案例! :) 你好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2021-07-28
  • 2012-12-08
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多