【问题标题】:separating a column into multiple based on character position根据字符位置将一列分成多个
【发布时间】:2018-06-27 13:39:01
【问题描述】:

我有类似的东西 set of data

891 Rehab  2a        SQ002  1                                                                                               
892 Rehab  2a        SQ002  1                                                                                               
893 Rehab  2a        SQ002  1                                                                                               
894 Rehab  2a        SQ002  2                                                                                               
895 Rehab  2a        SQ002  2                                                                                               
896 Rehab  2a        SQ002  1                                                                                               
897 Rehab  2a        SQ002  2                                                                                               
898 Rehab  2a        SQ002  2                                                                                               
899 Rehab  2a        SQ002  1                                                                                               
900 Rehab  2a        SQ002  1 

我不确定如何将包含 2a 的列(问题)分成两列,一列带有“a”,一列带有“2”。我以前试过这个

testra2<- testra1 %>% 
  separate(questionn,  
            into = c("num", "text"),
            sep= "(?=[0-9])(?<=[A-Za-z])")

但它基本上只是创建一个空白列,我收到以下警告消息:

"警告信息:预计 2 件。缺少的件用 NA 填充 在 2720 行中 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...]。

如果有任何帮助,我将不胜感激,非常感谢:)

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    你可以按位置分开。

    library(tidyverse)
    
    testra2<- testra1 %>% 
      separate(questionn,  
               into = c("num", "text"),
               sep = 1)
    

    或者使用extract函数。

    testra3 <- testra1 %>%
      extract(questionn, into = c("num", "text"), regex = "([0-9]+)([A-Za-z]+)")
    

    数据

    testra1 <- read.table(text = "891 Rehab  2a        SQ002  1                                                                                               
    892 Rehab  2a        SQ002  1                                                                                               
                          893 Rehab  2a        SQ002  1                                                                                               
                          894 Rehab  2a        SQ002  2                                                                                               
                          895 Rehab  2a        SQ002  2                                                                                               
                          896 Rehab  2a        SQ002  1                                                                                               
                          897 Rehab  2a        SQ002  2                                                                                               
                          898 Rehab  2a        SQ002  2                                                                                               
                          899 Rehab  2a        SQ002  1                                                                                               
                          900 Rehab  2a        SQ002  1 ",
                          header = FALSE, stringsAsFactors = FALSE)
    
    names(testra1) <- c("V1", "V2", "questionn", "V3", "V4")
    

    【讨论】:

      【解决方案2】:
      testra2 <- testra1 %>% 
      separate(questionn,  
              into = c("num", "text"),
              sep= "(?=[A-Za-z])")
      

      【讨论】:

        猜你喜欢
        • 2019-02-25
        • 1970-01-01
        • 2022-11-15
        • 1970-01-01
        • 2021-03-28
        • 2019-10-19
        • 1970-01-01
        • 1970-01-01
        • 2018-02-27
        相关资源
        最近更新 更多