【问题标题】:How to split a column into multiple (non equal) columns in R [duplicate]如何在R中将一列拆分为多个(不相等)列[重复]
【发布时间】:2021-11-02 00:15:56
【问题描述】:

我正在处理一个字符串,它是由逗号分隔的元素列表。我想分隔字符串,以便每个元素都有它的列。但我遇到了麻烦,因为每个列表的元素数量不同。

X1 <- "a,b,c"
X2 <- "a,b"
X3 <- "a,b,c,d"

DF <- data.frame(Col1= rbind(X1,X2,X3))

      Col1
X1   a,b,c
X2     a,b
X3 a,b,c,d

我希望它看起来像这样。每个元素都有自己的列,而不管字符的字符串中有多少元素。

      Col1  Col2 Col3 Col4
X1     a    b     c
X2     a    b
X3     a    b     c    d

谢谢!

【问题讨论】:

    标签: r string separator tidy


    【解决方案1】:

    我们可以使用来自splitstackshapecSplit

    library(splitstackshape)
    cSplit(DF, "Col1",",")
    

    -输出

    cSplit(DF, "Col1",",")
       Col1_1 Col1_2 Col1_3 Col1_4
    1:      a      b      c   <NA>
    2:      a      b   <NA>   <NA>
    3:      a      b      c      d
    

    【讨论】:

      【解决方案2】:

      使用stringr的替代解决方案:

      X1 <- "a,b,c"
      X2 <- "a,b"
      X3 <- "a,b,c,d"
      
      DF <- data.frame(Col1= rbind(X1,X2,X3))
      
      require(stringr)
      data.frame(str_split(DF$Col1, ",", simplify=TRUE))
      

      输出

        X1 X2 X3 X4
      1  a  b  c   
      2  a  b      
      3  a  b  c  d
      

      【讨论】:

        【解决方案3】:

        另一种方式:我们可以:

        library(tidyverse)
        
        as_tibble(DF) %>% separate(Col1, into = paste("Col", 1:4, sep = "_"))
        
          Col_1 Col_2 Col_3 Col_4
          <chr> <chr> <chr> <chr>
        1 a     b     c     NA   
        2 a     b     NA    NA   
        3 a     b     c     d    
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-08
          • 1970-01-01
          • 1970-01-01
          • 2013-12-03
          • 2018-02-05
          • 1970-01-01
          • 2021-12-20
          • 2019-07-06
          相关资源
          最近更新 更多