0

这是我当前的数据集,称为详细信息。

> details$names<- c("James Johnson","Michael Jones","Robert Miller","Christopher Smith","Richard Nolan","Constantine Wilson","Mountabatteen Keizman")

我想提取考虑这两个方面的名称部分:

1) 从左边开始,提取所有字符,直到出现空格或连字符(或减号)。

2) 提取不超过十个字符。

我试图通过使用以下代码来做到这一点:

> abrevStrings<- function(details$names) 
{   
gsub("([a-z])([A-Z])","([a-z])([A-Z])<= 10",details$names) 
}

但是我没有得到我想要的输出。

我想要的输出如下所示:

James 
Michael 
Robert 
Christophe 
Richard 
Constantin 
Mountabatt
4

1 回答 1

2

一种方法是使用subsubstr删除空格或连字符后的所有内容,然后仅选择前 10 个字符。

abrevStrings <- function(x) {
   substr(sub("\\s+.*|-.*", "", x), 1, 10)
}

abrevStrings(details$names)
#[1] "James"      "Michael"    "Robert"     "Christophe" "Richard" 
#    "Constantin" "Mountabatt"

或者另一种选择是将字符串拆分为空格或连字符并获取字符串第一部分的子字符串。

sapply(strsplit(details$names, "\\s+|-"), function(x) substr(x[1], 1, 10))

数据

details <- data.frame(names = c("James Johnson","Michael Jones","Robert Miller",
           "Christopher Smith","Richard Nolan","Constantine Wilson",
           "Mountabatteen Keizman"), stringsAsFactors = FALSE)
于 2019-03-17T07:25:30.527 回答