R语言如何无冗余地汇总dataframe中node两侧搭配词的出现频率
你原来的代码出现冗余的原因是仅用node作为关联键进行左连接时,会生成笛卡尔积:每个node下有M个不同的left取值、N个不同的right取值时,关联后会生成M*N行,因此出现大量重复条目。
可以通过给每个node下的左右侧统计结果分别添加组内行号,按node+行号一一对应关联,即可得到你想要的无冗余结果,实现代码如下:
library(tidyverse) # 统计各node下left的出现频率,按频率降序后添加组内行号 df_l <- df %>% group_by(node, left) %>% summarise(n_left = n(), .groups = "drop_last") %>% arrange(desc(n_left)) %>% mutate(id = row_number()) %>% ungroup() # 统计各node下right的出现频率,按频率降序后添加组内行号 df_r <- df %>% group_by(node, right) %>% summarise(n_right = n(), .groups = "drop_last") %>% arrange(desc(n_right)) %>% mutate(id = row_number()) %>% ungroup() # 按node和行号关联,删除辅助列id后得到结果 df_all <- inner_join(df_l, df_r, by = c("node", "id")) %>% select(n_left, left, node, right, n_right)
运行后输出的df_all就是你需要的结果:
# A tibble: 4 × 5 n_left left node right n_right <int> <chr> <chr> <chr> <int> 1 3 a xxx d 3 2 1 b xxx c 1 3 3 a yyy c 2 4 1 b yyy d 2
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

