我有一个全名列,应该用空格分成三列。问题是一些全名包含三个以上的单词,第四个和其他单词不应该省略,而是添加到第三部分。
例如,"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 :(得分: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是一个字符向量,它控制着什么时候发生的事情 有太多的碎片。有三个有效选项:
- &#34;警告&#34; (默认值):发出警告并删除额外值 - &#34;掉落&#34;:在没有警告的情况下丢弃任何额外的值 - &#34;合并&#34;:只分裂最长(进)次
答案 1 :(得分:2)
因为您说这个数据集只有name1, name2, last name
,所以您也可以使用str_split_fixed
中的stringr
,即
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
填充空位