簡體   English   中英

R:將一列(不同長度)拆分為新列

[英]R: Splitting one column (different lengths) into new columns

我有一列數據,我想用逗號分隔(我對這部分沒有問題)。 我遇到的問題是我希望將它分成數據框中的新列,而原始列本身具有不同數量的值,以逗號分隔。 例如:

第 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

謝謝!

這是使用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"))

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

希望下面的查詢有效,其中 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")

 abcd 1 AAA BBB CCC <NA> 2 AA232B <NA> <NA> <NA> 3 ABC DDD 4 52 AJD 23 <NA>

只是為了比較,一種只有基函數的方法,也就是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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM