在数据帧中查找匹配的标识符对

时间:2015-11-08 14:13:46

标签: r

我有一个数据框df

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

这意味着,用户id1对用户10执行某些操作(id2),并id26执行某项操作(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

但有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

基本上,您希望将df与自身合并,将(id2, id1)对与(id1, id2)对匹配。您可以使用mergematch

在R中执行此操作
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

答案 1 :(得分:0)

for(i in 1:nrow(df))
{df[i,4]<-df[which(df$id1==df[i,2]&df$id2==df[i,1]),3]}