我會盡力解釋我正在做的最好的事情,但它可能會讓我感到困惑,但我會給它一個答案。本質上,我從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