假设我的数据框中有一个人名向量:
names <- c("Bernice Ingram", "Dianna Dean", "Philip Williamson", "Laurie Abbott",
"Rochelle Price", "Arturo Fisher", "Enrique Newton", "Sarah Mann",
"Darryl Graham", "Arthur Hoffman")
我想创建一个带有名字的向量。我对它们的了解是,它们在上面的向量中排在第一位,后面跟着一个空格。换句话说,这就是我正在寻找的:
"Bernice" "Dianna" "Philip" "Laurie" "Rochelle"
"Arturo" "Enrique" "Sarah" "Darryl" "Arthur"
我发现了类似的问题here https://stackoverflow.com/questions/14326870/regular-expression-in-r-how-to-extract-characters-from-a-string,但答案(特别是this one https://stackoverflow.com/a/14326920/1169233)没有多大帮助。到目前为止,我已经尝试了一些函数的变体grep family http://stat.ethz.ch/R-manual/R-devel/library/base/html/grep.html,我能得到的最有用的东西就是运行strsplit(names, " ")
分隔名字,然后strsplit(names, " ")[[1]][1]
只获取第一个人的名字。我一直在尝试调整最后一个命令,为我提供完整的名字向量,但无济于事。
Use sapply
提取名字:
> sapply(strsplit(names, " "), `[`, 1)
[1] "Bernice" "Dianna" "Philip" "Laurie" "Rochelle" "Arturo" "Enrique"
[8] "Sarah" "Darryl" "Arthur"
一些评论:
上面的效果很好。为了使其更加通用,您可以更改split
参数输入strsplit
函数来自" "
in "\\s+"
覆盖多个空间。那么你也可以使用gsub
直接提取空格之前的所有内容。最后一种方法将仅使用一个函数调用,并且可能会更快(但我还没有检查基准)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)