【问题标题】:r - Sort the content of cell in an alphabetical orderr - 按字母顺序对单元格的内容进行排序
【发布时间】:2021-12-11 22:54:04
【问题描述】:

看看下面的数据框 (df)。

Date Modules
26-11-2021 NA, Advanced chemistry, Biochemistry
25-11-2021 Food physics, Food chemistry

我想按字母顺序排列模块列的内容。期望的输出:

Date Modules
26-11-2021 Advanced chemistry, Biochemistry, NA
25-11-2021 Food chemistry, Food physics

为了达到上述结果,我尝试了以下方法:

df[lapply(strsplit(as.character(df$Modules), ','), sort)),]

遗憾的是没有成功。我犯了什么根本性错误?

【问题讨论】:

    标签: r sorting


    【解决方案1】:

    使用toString 将已排序的字符串折叠回一个字符串。

    df$Modules <- sapply(strsplit(as.character(df$Modules), ',\\s*'), 
                         function(x) toString(sort(x)))
    df
    
    #        Date                              Modules
    #1 26-11-2021 Advanced chemistry, Biochemistry, NA
    #2 25-11-2021         Food chemistry, Food physics
    

    数据

    df <- structure(list(Date = c("26-11-2021", "25-11-2021"), 
          Modules = c("NA, Advanced chemistry, Biochemistry", 
                       "Food physics, Food chemistry")), 
          row.names = c(NA, -2L), class = "data.frame")
    

    【讨论】:

      【解决方案2】:

      我们可以使用来自tidyrseparate_rows

      library(dplyr)
      library(tidyr)
      df1 %>% 
         separate_rows(Modules, sep = ",\\s*") %>% 
         arrange(Date, Modules) %>%
         group_by(Date) %>% 
         summarise(Modules = toString(Modules))
      # A tibble: 2 × 2
        Date       Modules                             
        <chr>      <chr>                               
      1 25-11-2021 Food chemistry, Food physics        
      2 26-11-2021 Advanced chemistry, Biochemistry, NA
      

      数据

      df1 <- structure(list(Date = c("26-11-2021", "25-11-2021"),
       Modules = c("NA, Advanced chemistry, Biochemistry", 
      "Food physics, Food chemistry")), row.names = c(NA, -2L), class = "data.frame")
      

      【讨论】:

        【解决方案3】:

        我猜你可以使用 order 吗?

        v<-c("Z","X","Y","A","B","C")
        df<-data.frame(1:6,v)
        
        > df[order(df$v),]
          X1.6 v
        4    4 A
        5    5 B
        6    6 C
        2    2 X
        3    3 Y
        1    1 Z
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-29
          • 2015-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多