我有一个非常混乱的名称列,名称可能看起来像下面的名字
names<-c("Mr John Jo Mcbride","Jim Bucket", "Farshad Jimbo Letrick")
输出可以是任意数量的列,从空格分隔成列。所以在第一个名称之上需要四列,第二列是2列,第三列是3列。
我不关心订单,我只想根据空间分隔符将数据分解为每行所需的列数。
答案 0 :(得分:0)
这应该可以解决问题:
names<-c("Mr John Jo Mcbride","Jim Bucket", "Farshad Jimbo Letrick")
strsplit(names,split = '\\s')
答案 1 :(得分:0)
你可以使用stringr
包,它有一些很好的字符串操作功能,使用&#34; str_split_fixed&#34;将列拆分为分隔符。
1)计算整个名称中的单词数,将其保存在名为len的变量中。 2)使用&#34; str_split_fixed&#34;将其拆分为len的最大值。 3)根据您的方便重命名您的专栏。
data <- data.frame(names =c("Mr John Jo Mcbride","Jim Bucket", "Farshad Jimbo Letrick"),stringsAsFactors = F)
len <- sapply(gregexpr("\\W+", data$name), length) + 1
data$len <- len
library(stringr)
df_new <- data.frame(cbind(data,str_split_fixed(data$name, " ", max(len))))
names(df_new) <- c("names","length",paste0("name",1:max(len)))
df_new
<强>答案:强>
df_new
names length name1 name2 name3 name4
1 Mr John Jo Mcbride 4 Mr John Jo Mcbride
2 Jim Bucket 2 Jim Bucket
3 Farshad Jimbo Letrick 3 Farshad Jimbo Letrick
>