从列中删除逗号后的所有内容

10

我想要将这列数据处理为只显示姓氏,如果该列中存在逗号,则需要删除逗号及其后面的内容。该列数据包含仅有姓氏和姓氏名字混合的情况。数据如下:

Last Name  
Sample, A  
Tester  
Wilfred, Nancy  
Day, Bobby Jean  
Morris  
5个回答

22

您可以使用gsub()和一些正则表达式:

> x <- 'Day, Bobby Jean'
> gsub("(.*),.*", "\\1", x)
[1] "Day"

太好了 - 非常感谢。我需要更深入地研究这个gsub函数! - user3922483
不错,但是"(.?),."会把第一个逗号后面的所有内容都去掉。 - Organus

16
你可以使用 gsub:
gsub(",.*", "", c("last only", "last, first"))
# [1] "last only" "last"

",.*" 的意思是:用空白替换逗号 (,) 及其后的所有字符 (.*), 即替换为空 ""


0

还可以尝试使用strsplit函数:

string <- c("Sample, A", "Tester", "Wifred, Nancy", "Day, Bobby Jean", "Morris")

sapply(strsplit(string, ","), "[", 1)
#[1] "Sample" "Tester" "Wifred" "Day"    "Morris"

0
 str1 <- c("Sample, A", "Tester", "Wifred, Nancy", "Day, Bobby Jean", "Morris")
 library(stringr)
  str_extract(str1, perl('[A-Za-z]+(?=(,|\\b))'))
 #[1] "Sample" "Tester" "Wifred" "Day"   "Morris"  

匹配字母[A-Za-z]+并提取那些后面跟着,或单词边界的字母。


0

这将会起作用

a <- read.delim("C:\\Desktop\\a.csv", row.names = NULL,header=TRUE, 
                 stringsAsFactors=FALSE,sep=",")
a=as.matrix(a)
Data=str_replace_all(string=a,pattern="\\,.*$",replacement=" ")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接