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

时间:2016-07-27 16:12:03

标签: 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 AA232B 
3 A          B          C          D
4 52 ADJ 23

谢谢!

4 个答案:

答案 0 :(得分:0)

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

df<-data.table(x=c("AAA, BBB, CCC","AA232B","A, B, C, DDD","52 AJD 23"))

df %>% separate(x, c("a","b","c","d"), extra = "merge", fill = "left")

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

答案 1 :(得分:0)

仅供比较,一种只有基本功能的方式,又称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))

答案 2 :(得分:0)

以下是使用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 <- data.frame(x=c("AAA, BBB, CCC","AA232B","A, B, C, DDD","52 AJD 23"))

答案 3 :(得分:0)

使用SAVEPOINT库。

tidyr