【问题标题】:R: Splitting one column (different lengths) into new columnsR:将一列(不同长度)拆分为新列
【发布时间】:2016-07-27 16:12:02
【问题描述】:

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

第 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

谢谢!

【问题讨论】:

  • 看看tidyr::separate。
  • 我遇到的单独 (tidyr) 的问题是长度不同...例如,在第 2 行中,没有足够的值来填充 Col2-Col4,因此返回错误.

标签: r


【解决方案1】:

这是另一个使用cSplit的选项

library(splitstackshape)
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"))

【讨论】:

  • 只是一个简单的更正,这应该是splitstackshape而不是splistackshape。错过了t。谢谢@akrun
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    df %&gt;% 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>
    

    【讨论】:

      【解决方案4】:

      只是为了比较,一种只有基本函数的方法,也就是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))
      

      【讨论】:

        猜你喜欢
        • 2022-12-09
        • 2019-11-07
        • 1970-01-01
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        • 2020-10-01
        • 2021-10-26
        相关资源
        最近更新 更多