如何在 R 中将一列拆分为多个(不相等的)列

How to split a column into multiple (non equal) columns in R

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

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

谢谢!

我们可以使用 splitstackshape

中的 cSplit
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

使用 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

另一种方式:我们可以:

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