2015-11-08 54 views
0

匹配對標識符的我有一個數據幀df查找在數據幀

id1 id2 action 
    1 2  10 
    1 3  11 
    1 4  21 
    2 1  6 
... 

這意味着,用戶id1做某事(10)到用戶id2,和id2做某事(6)至id1

現在我想創建一個名爲partner_action的新列,它基本上記錄了合作伙伴做了什麼。所以它看起來像:

id1 id2 action partner_action 
    1 2  10    6 
    2 1  6    10 
    1 3  11    9 
    3 1  9    11 

我想:

df$partner_action = df[df$id2 == df$id1,]$action 

不過,當然,這是行不通的。

我想過做的df副本,叫做df_copy則:

df$partner_action = df_copy[df_copy$id1 == df$id2,]$action 

但有一個更好的方式來做到這一點?

回答

1

基本上你想合併df自己,匹配(id2, id1)對與(id1, id2)對。在R中可以要麼mergematch做到這一點:

df$partner_action <- with(df, action[match(paste(id2, id1), paste(id1, id2))]) 
df 
# id1 id2 action partner_action 
# 1 1 2  10    6 
# 2 2 1  6    10 
# 3 1 3  11    9 
# 4 3 1  9    11 

數據:

(df <- data.frame(id1=c(1, 2, 1, 3), id2=c(2, 1, 3, 1), action=c(10, 6, 11, 9))) 
# id1 id2 action 
# 1 1 2  10 
# 2 2 1  6 
# 3 1 3  11 
# 4 3 1  9 
0
for(i in 1:nrow(df)) 
{df[i,4]<-df[which(df$id1==df[i,2]&df$id2==df[i,1]),3]} 
+2

請提供一些解釋,在一些空間以提高可讀性混合可能幫助 – Marged