【问题标题】:How to separate a string of digits and letters of various length into different columns in R?如何将一串不同长度的数字和字母分成R中的不同列?
【发布时间】:2019-07-11 15:16:16
【问题描述】:

我有一个名为“WFBS”的列,其中包含超过一百万行不同长度的字符串,如下所示:

WFBS <- c("M010203", "S01020304", "N104509")

我需要一个如下所示的输出:

WFBS1 <- c("M01", "S01", "N10")
WFBS2 <- c("02", "02", "45")
WFBS3 <- c("03", "03", "09")
WFBS4 <- c(NA, "04", NA)

所以我需要将每个字符串分开: 第一列:3 个字符(即字母后跟 2 个数字) 其余列:每列 2 个字符,直到我没有剩余字符为止

我尝试使用函数strsplit,但它说我的变量不是字符,所以我创建了一个向量x,如下所示:

x <- as.character(WFBS)

但是我不知道如何使用函数 strsplit 将字符串分成列。

【问题讨论】:

    标签: r string


    【解决方案1】:

    带有base R 的选项可以使用sub 创建分隔符,,使用read.csv 读取以创建4 列data.frame

    read.csv(text = sub("^(...)(..)(..)(.*)", "\\1,\\2,\\3,\\4", WFBS), 
      header = FALSE, colClasses = rep("character", 4), na.strings = "",
            col.names =paste0("WFBS", 1:4), stringsAsFactors = FALSE)
    #    WFBS1 WFBS2 WFBS3 WFBS4
    #1   M01    02    03  <NA>
    #2   S01    02    03    04
    #3   N10    45    09  <NA>
    

    【讨论】:

      【解决方案2】:

      这可能是一个有用的起点:

      library(tidyr)
      df <- data.frame(WFBS = c("M010203", "S01020304", "N104509"),
                       stringsAsFactors = FALSE)
      > df %>% separate(col = WFBS,
                        into = c("WFBS1","WFBS2","WFBS3","WFBS4"),
                        sep = c(3,5,7))
        WFBS1 WFBS2 WFBS3 WFBS4
      1   M01    02    03      
      2   S01    02    03    04
      3   N10    45    09      
      

      这会使您在其余位置留下空字符串而不是 NA,您必须对其进行转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        相关资源
        最近更新 更多