用dplyr计数频率

用dplyr计数频率,r,dplyr,grouping,R,Dplyr,Grouping,我有一个数据帧,有两列id_1和id_2。对于每个id_1,我想计算它与id_2的所有元素的匹配数 我设想结果是一个数据帧,其中包含列id_1、id_2和数量_of_id_2_found_for_id_1 这就是我要尝试的 set.seed(1) df <- data.frame( id_1 = sample(1:10, size = 30, replace = TRUE), id_2 = sample(1:10, size = 30, replace = TRUE) ) df

我有一个数据帧,有两列id_1和id_2。对于每个id_1,我想计算它与id_2的所有元素的匹配数

我设想结果是一个数据帧,其中包含列id_1、id_2和数量_of_id_2_found_for_id_1

这就是我要尝试的

set.seed(1)
df <- data.frame(
  id_1 = sample(1:10, size = 30, replace = TRUE),
  id_2 = sample(1:10, size = 30, replace = TRUE)
)

df %>% group_by(id_1, id_2) %>%
  # id_1 should be unique
  summarise(~n(.x)) # I want this to be the number of id_2 it has found for each of the elements of id_1
set.seed(1)
df%分组依据(id_1,id_2)%>%
#id_1应该是唯一的
总结(~n(.x))#我希望这是它为id_1的每个元素找到的id_2的数量
我的预期产出是:

110
120
1 3 0
1 4 1
150
..
19 0
2110

27 1
28 0
291

以此类推,基本上每个id_1都是为每个id_2找到的元素数。在上面的示例中,它大部分是1,但在更大的数据帧中,计数会增加。这就像一个二部图,其中边是第一个组件id_1和id_2之间从左到右的匹配数


提前谢谢

根据更新后的帖子,我们可能需要进行
交叉
以返回所有组合,对两列的原始数据集进行
计数
,并使用完整组合进行连接

library(dplyr)
library(tidyr)
crossing(id_1 = 1:10, id_2 = 1:10)  %>% 
  left_join(., df %>% 
                  count(id_1, id_2)) %>%
  mutate(n = replace_na(n, 0))
-输出

# A tibble: 100 x 3
#    id_1  id_2     n
#   <int> <int> <dbl>
# 1     1     1     0
# 2     1     2     0
# 3     1     3     1
# 4     1     4     1
# 5     1     5     0
# 6     1     6     0
# 7     1     7     0
# 8     1     8     0
# 9     1     9     1
#10     1    10     0
# … with 90 more rows
#一个tible:100x3
#id_1 id_2 n
#     
# 1     1     1     0
# 2     1     2     0
# 3     1     3     1
# 4     1     4     1
# 5     1     5     0
# 6     1     6     0
# 7     1     7     0
# 8     1     8     0
# 9     1     9     1
#10     1    10     0
#…还有90行

对不起,输入错误。刚才更正了。从你提到的种子中,我得到了一行
13
我实际上想看看元素是什么,即id_1,id_2,number_of_id_2_found_for_id_1这给出了一个有两列的数据框,我想要一个有三列的数据框-唯一的id_1,id_2,以及id_2与id_1的大量匹配。我添加了一个编辑,其中包含了我对最终结果的想象be@Nikola谢谢,我没注意到。请务必在编辑时提及。thanks@Nikola我添加了一个解决方案。如果没有完整的预期输出,我只是猜测这可能是您想要的输出