如何在R中对混合值进行排序

Jor*_*an 5 r data-munging tidyverse

我有一个数据框,我想按一列而不是下一列进行排序(如果可能,使用 tidyverse)。

我检查了以下地址,但解决方案似乎不起作用。

订购“混合”向量(带有字母的数字)

示例代码:

variable <- c("channel", "channel", "channel", "comp_ded", "comp_ded", "comp_ded")
level <- c("DIR", "EA", "IA", "500", "750", "1000")
df <- as_tibble(cbind(variable, level))
Run Code Online (Sandbox Code Playgroud)

这并没有给我我想要的:

df <- df %>% arrange(variable, level)
Run Code Online (Sandbox Code Playgroud)

级别列的顺序如下:

variable level channel DIR channel EA channel IA level 1000 level 500 level 750

我需要他们:

variable level channel DIR channel EA channel IA level 500 level 750 level 1000

真实数据集中有多个不同的“变量”,其中一半需要按数字顺序排序,一半需要按字母顺序排序。有谁知道如何做到这一点?

div*_*san 2

它有点难看,但您可以使用过滤器语句将数据帧分成两个,单独排列每个部分,然后将它们绑定在一起:

df <- bind_rows(df %>%
              filter(!is.na(as.numeric(level))) %>%
              arrange(variable, as.numeric(level)),
          df %>%
              filter(is.na(as.numeric(level))) %>%
              arrange(variable, level))
Run Code Online (Sandbox Code Playgroud)

给你:

# A tibble: 6 x 2
  variable level
  <chr>    <chr>
1 comp_ded 500  
2 comp_ded 750  
3 comp_ded 1000 
4 channel  DIR  
5 channel  EA   
6 channel  IA   
Run Code Online (Sandbox Code Playgroud)