用dplyr计数频率
我有一个数据帧,有两列id_1和id_2。对于每个id_1,我想计算它与id_2的所有元素的匹配数 我设想结果是一个数据帧,其中包含列id_1、id_2和数量_of_id_2_found_for_id_1 这就是我要尝试的用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
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的数量
我的预期产出是:
110120
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我添加了一个解决方案。如果没有完整的预期输出,我只是猜测这可能是您想要的输出