【发布时间】:2017-07-18 14:48:02
【问题描述】:
我正在尝试编写一个循环来对数据框执行以下操作:
对于“名称”列中的每个名称,检查“推荐”列中是否存在粗略匹配(通过 agrep() 完成)。如果存在匹配项,请将“推荐”列中与名称大致匹配的所有单元格替换为“推荐”。
到目前为止,这是我的代码:
for (i in 1:1000){
for (q in 1:length(agrep(c$Name[i], c$Referal))){
if (length(agrep(c$Name[i], c$Referal)>0)){
c$Referal[agrep(c$Name[i], c$Referal)[q]]<-'panda'
}
}
}
但是,此代码(在运行 20 分钟后)将“推荐”列中的所有单元格替换为“推荐”。我想知道第一行中的“i”在整个循环中是否保持不变?显然是一个笨重的代码块,但我想不出它为什么会这样做......
一个例子是:
Name <- c('michael jordan', 'carrot', 'ginger')
Referral <-('internet', 'facebook', 'mike jordan')
df <- data.frame(Name, Referral)
运行函数后,理想情况下 df$Referral[3]=='referral' 为 TRUE。
【问题讨论】:
-
请分享您的数据框和所需输出的可重现示例。您可以使用其他方法来替换
for loop操作。但我们需要了解您的数据才能提供帮助。 -
您可以参考此链接了解如何制作可重现的示例:stackoverflow.com/questions/5963269/…。
-
谢谢——我会努力让数据集的一部分重现错误
标签: r for-loop if-statement agrep