【发布时间】:2016-06-25 08:36:32
【问题描述】:
所以,这就是我的数据框的样子:
Product_Code Publisher Published_Date
AB1F A 2011
AB1F (A Version) A 1999
TG1F (B Version) B 2001
AB1Z (A Version) A 2003
TG1F B 2006
GX1T C 2011
大约有 130 万行。
我要做的是针对具有相同发布者的行,我会在 Product_Code 中使用 grep() 来查找具有相同产品代码的行,而不管它们是什么版本。并将它们设置为具有最早的 Published_Date。
所以结果会是这样的:
Product_Code Publisher Published_Date
AB1F A 1999
AB1F (A Version) A 1999
TG1F (B Version) B 2001
AB1Z (A Version) A 2003
TG1F B 2001
GX1T C 2011
我试过了
for (n in 1:nrow(df)) {
A=which(grepl(df[n,1],df[,1])==TRUE & df[n,2]==df[,2])
min.date=min(df[A,3])
df[A,3]=min.date
}
我不确定这个 for 循环代码是否有效,因为我的计算机永远不会完成代码的运行。
任何帮助将不胜感激!
【问题讨论】:
-
产品变体是否总是由“(”区分?如果是这样,我真的会开始
splitProduct_Code by(必须分隔字段。然后这个问题可以很容易地回答没有任何完全循环。 -
没有。不幸的是,它们并不总是由特定的字符串(如“(”)来区分。例如,一些 Product_Code 将像 AB1F(版本 A)、AB1F - 版本 A、AB1F 版本 A、AB1F ver.A、AB1F 新等。
-
@Dominique 如果您的原始数据集没有显示在这里,我们怎么知道它的模式?
-
@akrun,很抱歉。这是我的错。我刚刚打印了 head()。但可以肯定的一件事是没有公认的模式。这就是为什么我的想法是在 for 循环中对每个 n 使用 grep() 来查找共享基本产品代码的行。
-
注意,如果这是产品代码,可以用空格分隔,只取第一个字符串(代码)
标签: r