【发布时间】:2016-03-04 09:07:46
【问题描述】:
我正在寻找 R 中以下问题的简化解决方案:我有一个用逗号分隔的名称列表 - 但是,其中一些名称中也包含逗号。为了分隔名称,我想先用逗号替换所有名称,然后用逗号分隔。我的问题是我有大约 26 000 个字符串,每个字符串都有几个名字,我有一个大约 130 个带逗号的名字的列表。我编写了一个嵌套的 foreach 循环(为了使用多个内核来加快速度),它可以工作,但速度非常慢。有没有更快的方法来搜索字符串并替换相关名称?这是我的示例代码:
List_of_names<-as.data.frame(c("Fred, Heiko, Franz, Jr., Nice, LLC, Meike","Digital, Mike, John, Sr","Svenja, Sven"))
Comma_names<-as.data.frame(c("Franz, Jr.","Nice, LLC","John, Sr"))
colnames(Comma_names)<-"name"
Comma_names$replace_names<-gsub(",", "",Comma_names[,"name"])
library(doParallel)
library(foreach)
cl<-makeCluster(4) # Create cluster with desired number of cores
registerDoParallel(cl) # Register cluster
names_new<-foreach (i=1:nrow(List_of_names),.errorhandling="pass",.packages=c("foreach")) %dopar% {
name_2<-List_of_names[i,]
foreach (j=1:nrow(Comma_names),.combine=rbind,.errorhandling="pass") %do% {
if(length(grep(Comma_names[j,1],name_2))>0){
name_2<-gsub(Comma_names[j,1], Comma_names[j,2],name_2)
}
}
name_2
}
此外,foreach 循环的结果是一个列表,但如果我尝试保存列表或替换原始数据框中的列它需要永远。如何更改我的代码以使其更快?
感谢所有阅读本文并能够提供帮助的人!
【问题讨论】: