Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 提取字符串中第一个逗号前的最后一个单词_R_String - Fatal编程技术网

R 提取字符串中第一个逗号前的最后一个单词

R 提取字符串中第一个逗号前的最后一个单词,r,string,R,String,我有一个像“马克·M·欧文斯,M.D.,M.p.H.”这样的名字列表,我想按名字、姓氏和头衔进行排序。对于此数据,如果有标题,标题总是在第一个逗号之后开始 我试图将列表分为以下几类: FirstName LastName标题 马克·欧文斯医学博士 劳拉卡夫- Dale Good C.P.A 提前谢谢 以下是我的示例代码: namelist <- c("Mark M. Owens, M.D., M.P.H.", "Dale C. Good, C.P.A", "Lara T. Kraft" ,

我有一个像“马克·M·欧文斯,M.D.,M.p.H.”这样的名字列表,我想按名字、姓氏和头衔进行排序。对于此数据,如果有标题,标题总是在第一个逗号之后开始

我试图将列表分为以下几类:

FirstName LastName标题
马克·欧文斯医学博士
劳拉卡夫-
Dale Good C.P.A

提前谢谢

以下是我的示例代码:

namelist <- c("Mark M. Owens, M.D., M.P.H.", "Dale C. Good, C.P.A", "Lara T. Kraft" , "Roland G. Bass, III")
firstnames=sub('^?(\\w+)?.*$','\\1',namelist)
lastnames=sub('.*?(\\w+)\\W+\\w+\\W*?$', '\\1', namelist)
titles = sub('.*,\\s*', '', namelist)
names <- data.frame(firstnames , lastnames, titles )

namelist至少在测试数据上,这应该可以做到:

x=strsplit(namelist,split = ",")
x=rapply(object = x,function(x) gsub(pattern = "^ ",replacement = "",x =     x),how="replace")

names=sapply(x,function(y) y[[1]])
titles=sapply(x,function(y) if(length(unlist(y))>1){
    paste(na.omit(unlist(y)[2:length(unlist(y))]),collapse = ",")
}else{""})
names=strsplit(names,split=" ")
firstnames=sapply(names,function(y) y[[1]])
lastnames=sapply(names,function(y) y[[3]])

names <- data.frame(firstnames, lastnames, titles )
names
x=strsplit(名称列表,split=“,”)
x=rapply(对象=x,函数(x)gsub(pattern=“^”,replacement=“”,x=x),how=“replace”)
name=sapply(x,函数(y)y[[1]]
titles=sapply(x,函数(y)如果(长度(未列出(y))>1){
粘贴(na.省略(未列出(y)[2:长度(未列出(y))])),折叠=“,”)
}else{“})
name=strsplit(name,split=”“)
firstnames=sappy(名称、函数(y)y[[1]])
lastnames=sapply(名称、函数(y)y[[3]])

name你有一个好的开始,所以你应该从那里开始。
firstnames
变量写得很好。对于
lastnames
我使用了一个修改过的名字列表。子函数的内部是另一个消除第一个逗号之后的所有内容的函数。姓氏将成为字符串中的最后一个单词。对于
标题
有两个步骤,首先删除第一个逗号之前的所有内容,然后用连字符
-
替换不匹配的字符串

namelist <- c("Mark M. Owens, M.D., M.P.H.", "Dale C. Good, C.P.A", "Lara T. Kraft" , "Roland G. Bass, III")
firstnames=sub('^?(\\w+)?.*$','\\1',namelist)
lastnames <- sub(".*?(\\w+)$", "\\1", sub(",.*", "", namelist), perl=TRUE)
titles <- sub(".*?,", "", namelist)
titles <- ifelse(titles == namelist, "-", titles)

names <- data.frame(firstnames , lastnames, titles )
  firstnames lastnames        titles
1       Mark     Owens  M.D., M.P.H.
2       Dale      Good         C.P.A
3       Lara     Kraft             -
4     Roland      Bass           III
姓名列表字符串
“罗兰G.巴斯,III”
在最终输出中应该如何显示?