首页 > 解决方案 > 如何计算任意两个给定值在 R 中连续出现的次数?

问题描述

我正在使用这样的数据框,该ID列指示特定出版物:

ID AuthorA AuthorB AuthorC
1   Chris   Lee     Jill
2   Jill    Tom     Lee 
3   Tom     Chris   Lee
4   Lee     Jill    NA
5   Jill    Chris   NA

我想为社交网络分析生成一个sourcetargetcount列。换句话说,计算两位作者出现在同一出版物上的次数。然而,我正在使用的数据框有 18 个作者列。这应该是最终输出:

Source Target Count
Chris   Lee     2
Chris   Jill    2
Lee     Jill    3
Jill    Tom     1
Tom     Lee     2
Tom     Chris   1

标签: rcounthyperlinkfrequencypairwise

解决方案


对于每一行,您都可以创建名称的所有组合并使用 计算它们的频率table

result <- stack(table(unlist(apply(df[-1], 1, function(x) {
                 vec <- na.omit(x)
                 if(length(vec) < 2) return(NULL)
                  combn(vec, 2, function(y) paste0(sort(y), collapse = '-'))
            }))))[2:1]
result
#         ind values
#1 Chris-Jill      2
#2  Chris-Lee      2
#3  Chris-Tom      1
#4   Jill-Lee      3
#5   Jill-Tom      1
#6    Lee-Tom      2

要将它们放在单独的列中,您可以使用separate

tidyr::separate(result, ind, c('Source', 'Target'), sep = '-')

#  Source Target values
#2  Chris   Jill      2
#3  Chris    Lee      2
#4  Chris    Tom      1
#6   Jill    Lee      3
#7   Jill    Tom      1
#9    Lee    Tom      2

推荐阅读