【问题标题】:R split a column in this formatR以这种格式拆分一列
【发布时间】:2020-06-27 19:56:06
【问题描述】:

我需要将此列拆分为 2 列

  • 5/5/2020 汤姆·特斯拉

想要的结果是

  • Col1 Col2
  • 5/5/2020 汤姆·特斯拉

我已经尝试过 strAny,但需要帮助,因为 Col 1 不是固定的,因为日期字段长度会因当月日期的 1 或 2 个字符而变化。 有什么建议吗?

【问题讨论】:

    标签: r split strsplit


    【解决方案1】:

    我们可以使用separate 和正则表达式环视来分割数字和小写字母

    library(tidyr)
    separate(df1, 'col1', into = c('date', 'other'), sep="(?<=[0-9])(?=[A-Za-z])")
    #     date             other
    #1  1/1/2000            yogurt
    #2  1/1/2000      toilet paper
    #3  2/1/2000              soda
    #4 11/1/2000            bagels
    #5 12/1/2000            fruits
    #6 13/1/2000 laundry detergent
    

    或者使用base Rstrsplit

    do.call(rbind, strsplit(as.character(df1$col1),
          "(?<=[0-9])(?=[A-Za-z])", perl = TRUE))
    

    数据

    df1 <- structure(list(col1 = c("1/1/2000yogurt", "1/1/2000toilet paper", 
    "2/1/2000soda", "11/1/2000bagels", "12/1/2000fruits", "13/1/2000laundry detergent"
    )), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

      【解决方案2】:

      这里有几种方法:

      使用来自tidyrextract

      tidyr::extract(df, col1, c('col1', 'col2'), regex = '(.*\\d)(.*)')
      

      或者使用dplyrstringr

      library(dplyr)
      library(stringr)
      
      df %>%
        mutate(col2 = str_extract(col1, '\\d+/\\d+/\\d+'), 
               col3 = str_remove(col1, col2))
      

      【讨论】:

        猜你喜欢
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多