2017-08-15 137 views
1

我有一列全名,應該按照空格分成三列。問題是一些全名包含三個以上的單詞,第四和其他單詞不應該被忽略,但是會被添加到第三部分。
例如,"Abdullaeva Mehseti Nuraddin Kyzy"應分開爲:將列分隔爲三列,分組編號爲

| Abdullaeva | Mehseti | Nuraddin Kyzy | 

我試圖分裂與(tidyr)包作爲跟隨列,但在本方式的3D部分只包含1後第二空間字。

df<-df %>% 
    separate('FULL_NAME', c("1st_part","2d_part","3d_part"), sep=" ") 

任何幫助將不勝感激。

+0

請提供可重複的例子 – Sotos

+0

你始終'名1名2 FNAME lname',你想'| name1 | name2 | fname lname |'? –

+0

@ shA.t,幾乎在大多數情況下,是的,但我想這是可能的情況,我應該以其他方式對名稱進行分組:'| name1 | name2 name3 | lname |'爲另一個數據集(不在這一個) –

回答

2

使用extra說法:

# dummy data 
df1 <- data.frame(x = c(
    "some name1", 
    "justOneName", 
    "some three name", 
    "Abdullaeva Mehseti Nuraddin Kyzy")) 

library(tidyr) 
library(dplyr) 

df1 %>% 
    separate(x, c("a1", "a2", "a3"), extra = "merge") 
#   a1  a2   a3 
# 1  some name1   <NA> 
# 2 justOneName <NA>   <NA> 
# 3  some three   name 
# 4 Abdullaeva Mehseti Nuraddin Kyzy 
# Warning message: 
# Too few values at 2 locations: 1, 2 

從手冊:

額外

如果SEP是一個特徵向量,該控制的時候 有太多的作品會發生什麼。有三種有效選項:
- 「警告」(默認值):發出警告並刪除額外的值。
- 「drop」:在沒有警告的情況下刪除任何額外的值。
- 「合併」:只拆分最多長度(進)次

+0

什麼是額外=合併業務? – Sotos

+1

@Sotos黑魔法:D – zx8754

+0

Hihi ...可以追溯到黑暗時代:)雖然不錯的爭論。合併所有其餘的列。我想知道這是否可以用來解決未知數量的cols(有點像cSplit) – Sotos

2

由於該數據集,你說,你只有name1, name2, last name,那麼你也可以使用來自stringrstr_split_fixed,即

setNames(data.frame(stringr::str_split_fixed(df1$x, ' ', 3)), paste0('a', 1:3)) 

其中給出,

 a1  a2   a3 
1  some name1    
2 justOneName      
3  some three   name 
4 Abdullaeva Mehseti Nuraddin Kyzy 

注意,你可以填補NA空槽按通常