将列分隔为三列,分组编号为
问题描述:
我有一列全名,应该按照空格分成三列。问题是一些全名包含三个以上的单词,第四和其他单词不应该被忽略,但是会被添加到第三部分。
例如,"Abdullaeva Mehseti Nuraddin Kyzy"
应分开为:将列分隔为三列,分组编号为
| Abdullaeva | Mehseti | Nuraddin Kyzy |
我试图分裂与(tidyr
)包作为跟随列,但在本方式的3D部分只包含1后第二空间字。
df<-df %>%
separate('FULL_NAME', c("1st_part","2d_part","3d_part"), sep=" ")
任何帮助将不胜感激。
答
使用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”:在没有警告的情况下删除任何额外的值。
- “合并”:只拆分最多长度(进)次
答
由于该数据集,你说,你只有name1, name2, last name
,那么你也可以使用来自stringr
str_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
空槽按通常
请提供可重复的例子 – Sotos
你始终'名1名2 FNAME lname',你想'| name1 | name2 | fname lname |'? –
@ shA.t,几乎在大多数情况下,是的,但我想这是可能的情况,我应该以其他方式对名称进行分组:'| name1 | name2 name3 | lname |'为另一个数据集(不在这一个) –