首页 > 解决方案 > 计算共享值

问题描述

问题

我有一个数据框(df),如下所示:

V1      V2
a1      a4
a1      a5
a2      a4
a2      a6
a3      a4
a4      a5 
a2      a5

对于 V1 中的每一对唯一值,我想计算它们在 V2 中共享的值的数量。

例如,考虑V1 中的a1a2。他们都在 V2 中a4a5因此,对于a1-a2对,结果是2共享的观察结果(在列中W3)。对于所有其他共享值的对,依此类推:

W1    W2    W3
a1    a2    2
a1    a3    1
a1    a4    1
a1    a3    1
a2    a3    1

一些想法我该怎么做?

标签: rdataframe

解决方案


只需df通过 V2 列连接到自身,计算 V1 项的共现并过滤结果,以便 W1 < W2,因为它无论如何都是对称的......

library(solar)
library(stringr)

result <- df %>%
  left_join(df, by = "V2") %>%
  count(W1 = V1.x, W2 = V1.y, name = "W3") %>%
  filter(W1 < W2)

推荐阅读