为何使用separate函数拆分数据框姓名列时出现警告?
问题原因分析
你遇到的警告核心原因是**separate函数的sep参数设置错误**:
- 你指定了
sep='',这个参数会将字符串按单个字符拆分。比如"ravi kumar"会被拆成r,a,v,i, ,k,u,m,a,r等多个片段,而你只指定了into=c('first_name','last_name')两个输出列,所以每一行都会有大量多余片段被丢弃,触发警告。 - 另外第一个名字"john"本身没有空格,就算sep设置正确,也无法拆分为两段,这种情况可以通过
fill参数处理。
修正后的代码
将sep改为空格匹配(如果有多个连续空格,推荐用\\s+匹配任意空白字符),同时可选添加fill='right'处理无姓氏的条目:
library(tidyr) id<-c(1:10) name<-c("john","ravi kumar","vikas regmi","rakesh barjatia","mandy cloy","clay cook","praveen regmi","michael armstrong", "jose hoe", "saurabh kumar") job_title <-c("CA", "chief consultant", "vice-consultant", "CTO", "CMO", "CFO","CEO","people analyst","data analyst","HR") employee<-data.frame(id,name,job_title) # 用空格拆分,fill='right'处理无姓氏的行 separate(employee, name, into=c('first_name','last_name'), sep='\\s+', fill='right')
运行这段代码后,会正确拆分出名字和姓氏:没有姓氏的"john"会在last_name列显示为NA,不会触发警告。
内容的提问来源于stack exchange,提问作者Praveen Regmi
相关产品推荐
相关产品推荐

