首页 > 解决方案 > 基于R中具有相似向量的两列对一列项目求和或聚合

问题描述

请在两列中聚合具有相似项目的行。请问有“或”功能吗?我在下面发布了一个示例数据集:

A1 <- data.frame(Animal1= c("A", "A","B","B","D") ,Animal2=c("B","D","D","A","B"),Frequency=c(2,3,1,4,5))
> A1
  Animal1 Animal2 Frequency
1       A       B         2
2       A       D         3
3       B       D         1
4       B       A         4
5       D       B         5

如何聚合,以便我只得到一个值,结合第 3 行和第 5 行的频率,其中第 3 行的 Animal1 为 B,Animal2 为 D,第 5 行的 Animal1 为 D,Animal2 为 B,频率为 6?

标签: rdplyrdata.tabletidyverse

解决方案


这是一个可能的解决方案。我可能过于复杂了,但它应该会给你想要的结果。我做的第一件事是使字符串不是数据框中的因素。

A1 <- data.frame(Animal1= c("A", "A","B","B","D"), Animal2=c("B","D","D","A","B"), 
                 Frequency=c(2,3,1,4,5), stringsAsFactors = FALSE) 

A1 %>% 
  mutate(combined = map2_chr(Animal1, Animal2, ~paste0(sort(c(.x, .y)), collapse = ""))) %>%  
  group_by(combined) %>% 
  summarise(total = sum(Frequency))

输出

# A tibble: 3 x 2
  combined total
  <chr>    <dbl>
1 AB           6
2 AD           3
3 BD           6

推荐阅读