我有一个字符串让我们说
text1 <- "John K Doe"
我想回来:
"John Doe"
"J K Doe"
我使用strsplit
,paste
和substr
如下:
paste(strsplit(text1, " ")[[1]][1], strsplit(text1, " ")[[1]][3])
[1] "John Doe"
paste(substr(text1, 1, 1), strsplit(text1, " ")[[1]][2], strsplit(text1, " ")[[1]][3])
[1] "J K Doe"
如你所见,这是我期待的回报结果。但是,我想看看是否有任何简单或更有效的方法来做到这一点。
谢谢,我感谢所有支持和帮助。
答案 0 :(得分:4)
使用strsplit()
的替代方法是使用带有gsub()
的正则表达式。如果您希望在稍后的某个时间点提取名称和缩写的复杂规则,则此选项可能会更有用。
x <- "John K Doe"
gsub("^(\\w+) \\w (\\w+)$", "\\1 \\2", x)
[1] "John Doe"
gsub("^(\\w)\\w* (\\w) (\\w+)$", "\\1 \\2 \\3", x)
[1] "J K Doe"
答案 1 :(得分:1)
这是一种与您的方法基本相似但只运行一次strsplit
sapply(strsplit(text1," "), function(a) paste(a[1],a[3]))
#OR
sapply(strsplit(text1," "), function(a) paste(a[-2], collapse = " "))
#[1] "John Doe"
sapply(strsplit(text1," "), function(a) paste(substr(a[1],1,1),a[2],a[3]))
#[1] "J K Doe"