【发布时间】:2012-11-22 13:02:05
【问题描述】:
我想将一系列名称更改为它们的首字母,
假设我有两个名字c("Ben Franklin", "Millard Fillmore"),我想将它们子集到c("BF", "MF"),我已经阅读了?gsub 的帮助文件,但我无法弄清楚。这里有人可以帮帮我吗?
【问题讨论】:
-
@agstudy,我和
gsub混在一起了,但我不理解它,我可以想出你和其他人的建议。谢谢!
我想将一系列名称更改为它们的首字母,
假设我有两个名字c("Ben Franklin", "Millard Fillmore"),我想将它们子集到c("BF", "MF"),我已经阅读了?gsub 的帮助文件,但我无法弄清楚。这里有人可以帮帮我吗?
【问题讨论】:
gsub 混在一起了,但我不理解它,我可以想出你和其他人的建议。谢谢!
这会删除所有非大写字母:
> s <- c("Ben Franklin", "Millard Fillmore")
> gsub("[^A-Z]", "", s)
[1] "BF" "MF"
如果您根据 cmets 有诸如“Allan McCormick”之类的字符串,这里是一个更复杂的正则表达式:
s <- c("Ben Franklin", "Millard Fillmore", "Allen McCormick")
gsub("(.)\\S* *", "\\1", s)
[1] "BF" "MF" "AM"
【讨论】:
只用 gsub
gsub(pattern='(.)(.*)[[:space:]](.)(.*)','\\1\\3',c("Ben Franklin", "Millard Fillmore"))
"BF" "MF"
【讨论】:
gsub("^(.).* (.).*", "\\1\\2", x) 但是,它仍然假设每个人只有 2 个名字。如果某人有中间名,则不会使用中间名首字母(这可能是可取的)。
拆分" " 上的字符串,然后将substr 函数应用于每个组件并使用粘贴折叠结果
> x <- c("Ben Franklin", "Millard Fillmore")
> sapply(strsplit(x, " "), function(x) paste(substr(x, 1, 1), collapse=""))
[1] "BF" "MF"
【讨论】: