R:将一列(不同长度)拆分为新列

R:将一列(不同长度)拆分为新列,r,R,我有一列数据,我想用逗号分隔(这部分我没有问题)。我遇到的问题是,我希望它在数据帧中被分隔成新的列,而原始列本身有不同数量的值,这些值用逗号分隔。例如: 第1栏 Column1 1 AAA, BBB, CCC 2 AA232B 3 A, B, C, DDD 4 52 AJD 23 给定这组数据,我将有四列: Col1 Col2 Col3 Col4 1 AAA BBB CCC 2 AA23

我有一列数据,我想用逗号分隔(这部分我没有问题)。我遇到的问题是,我希望它在数据帧中被分隔成新的列,而原始列本身有不同数量的值,这些值用逗号分隔。例如:

第1栏

        Column1
1 AAA, BBB, CCC
2        AA232B
3  A, B, C, DDD
4     52 AJD 23
给定这组数据,我将有四列:

  Col1       Col2       Col3       Col4
1 AAA        BBB        CCC
2 AA232B 
3 A          B          C          D
4 52 ADJ 23

谢谢

希望下面的查询有效,其中a、b、c、d表示列名。您可以根据自己的意愿替换NA

df%分离(x,c(“a”、“b”、“c”、“d”),extra=“merge”,fill=“left”)

a b c d
1 AAA BBB CCC
2 AA232B
3 A B C DDD
4 52 AJD 23

只是为了比较,一种只使用基函数的方法,也就是
tidyr

test <- apply(df, 1, function(i) {unlist( strsplit( i, split = ",") )})
test <- lapply(test, function(i) {c( i, rep( NA, 4-length(i)) )})
test <- data.frame(matrix(unlist(test), ncol = 4, byrow = T))

test这里是另一个使用
cSplit的选项

library(splistackshape)
cSplit(df, "x", ",")
#         x_1 x_2 x_3 x_4
#1:       AAA BBB CCC  NA
#2:    AA232B  NA  NA  NA
#3:         A   B   C DDD
#4: 52 AJD 23  NA  NA  NA
数据
df使用
tidyr

library(tidyr)

> df <- data.frame(col1 = c('AAA, BBB, CCC', 
                          'AA232B', 
                          'A, B, C, DDD', 
                          '52 AJD 23'))

> df %>% separate(col1, paste0('col', c(1:4)), sep = ',', remove = T)

> df 

##        col1 col2 col3 col4
## 1       AAA  BBB  CCC <NA>
## 2    AA232B <NA> <NA> <NA>
## 3         A    B    C  DDD
## 4 52 AJD 23 <NA> <NA> <NA>
library(tidyr)
>df%>%分离(col1,paste0('col',c(1:4)),sep=',,remove=T)
>df
##col1 col2 col3 col4
##1 AAA BBB CCC
##2 AA232B
##3 A B C DDD
##4 52 AJD 23

看看
tidyr::separate
。我使用separate(tidyr)时遇到的问题是长度不同……例如,在第2行中,没有足够的值填充Col2-Col4,因此返回了一个错误。
df <- data.frame(x=c("AAA, BBB, CCC","AA232B","A, B, C, DDD","52 AJD 23"))
library(tidyr)

> df <- data.frame(col1 = c('AAA, BBB, CCC', 
                          'AA232B', 
                          'A, B, C, DDD', 
                          '52 AJD 23'))

> df %>% separate(col1, paste0('col', c(1:4)), sep = ',', remove = T)

> df 

##        col1 col2 col3 col4
## 1       AAA  BBB  CCC <NA>
## 2    AA232B <NA> <NA> <NA>
## 3         A    B    C  DDD
## 4 52 AJD 23 <NA> <NA> <NA>