我会尽力解释我正在做的最好的事情,但它可能会让我感到困惑,但我会给它一个答案。本质上,我从2个数据框开始。每个人每个人包含一个唯一的行,每个用户包含两个列作为列。我的目标是在条件不重复的情况下,将这个数据框变成1个数据框,每个用户有一个唯一的行,并且来自两个数据框中每一个的第一个条目。例如,如果对于第一个数据框中的客户1,他的项目是“a”和“d”,并且在第二个数据框中他的项目是“a”和“c”,我希望最终的数据框架是“a”和“c”这个客户。但是我写了一个应用程序,但是当我在大约160,000行上执行此操作时,需要相当长的一段时间。我希望有人能够为我的问题提出更有效的解决方案。提取符合每行特定条件的第一列
d1 <- data.frame(id = c("1", "2", "3"), stringsAsFactors = F)
r1 <- data.frame(i1 = c("a", "b", "c"), i2 = c("d", "e", "f"), stringsAsFactors = F)
rownames(r1) = d1$id
r2 <- data.frame(i1 = c("a", "c", "f"), i2 = c("c", "t", "l"), stringsAsFactors = F)
rownames(r2) = d1$id
dFinal <- data.frame(id = d1$id, r1 = "", r2 = "", stringsAsFactors = F)
dFinal$r1 = apply(dFinal, 1, function(x){r1[rownames(r1) == x["id"], "i1"]})
dFinal$r2 = apply(dFinal, 1, function(x){r2[rownames(r2) == x["id"], which(!r2[rownames(r2) == x["id"],c("i1","i2")] %in% x["r1"])[1]]})
嗯,我可以看到合并工作,但是我不确定合并的一部分将是如何选择合并后的正确列。可以说,r1和r2的id是列而不是rownames。 'dInter < - merge(r1,r2,by =“id”)'但是我不知道如何从应用中复制逻辑,我只选择了正确的列 – mikew
在您的示例中,为什么* a *和* c *而不是* a *和* d *?还有其他标准吗? – Parfait
@Parfait我想从每个数据框中的前一个数据框中不存在的第一个可用列。因此,从第一个数据帧开始,选择第一列_a_,然后对于第二个数据帧中的相同ID,选择是_a_和_c_,因为a已经用于第一个数据帧,则选择_c_。 – mikew