我有一个访客列表,在一列中有一个姓氏,然后在另一列中我有一个姓氏或全家每个人的全名(最后一个空格)。我想让其他专栏只有名字。
gsub(guest.w$Last.Name,"",guest.w$Party.Name.s.)
如果我只有一行但是如何为数据帧中的每一行做这件事,那将会很有效。我必须写一个for循环吗?有没有办法与pmax()与max()相关的方式并行执行。
我的问题与previously asked question by JD Long类似,但与我的问题相比,这个问题是件小事。
史密斯;乔史密斯,凯文史密斯,简史密斯 改变; Robert Alter,Mary Alter,Ronald Alter
变为
史密斯;乔,凯文,简
改变;罗伯特,玛丽,罗纳德
答案 0 :(得分:1)
使用hadleys adply:
library(plyr)
df <- data.frame(rbind(c('Smith', 'Joe Smith, Kevin Smith, Jane Smith'), c('Alter', 'Robert Alter, Mary Alter, Ronald Alter')))
names(df) <- c("last", "name")
adply(df,1,transform, name=gsub(last, '', name))
您可能需要清理新矢量中的空格。
答案 1 :(得分:0)
最终结果如下:
df <- rbind(c('Smith', 'Joe Smith, Kevin Smith, Jane Smith'), c('Alter', 'Robert Alter, Mary Alter, Ronald Alter'))
colnames(df) = c('Last.Name', 'Party.Name.s.')
apply(df,1,function(y) {y = as.list(y);return(gsub(y$Last.Name, "", y$Party.Name.s.))})
答案 2 :(得分:-2)
我不确定它是否适用于数据帧,但您可以尝试使用其中一个应用函数:
`y1 <- sapply(dataframe, gsub(guest.w$Last.Name,"",guest.w$Party.Name.s.))`