根据字符位置将一列分成多个

时间:2018-06-27 13:39:01

标签: r tidyverse

我有类似的东西 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,...]。

感谢您的帮助,非常感谢:)

2 个答案:

答案 0 :(得分:2)

您可以按位置分开。

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")

答案 1 :(得分:1)

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