汇总R数据框中独立于顺序的列,(df$A,df$B)=(df$B,df$A)

汇总R数据框中独立于顺序的列,(df$A,df$B)=(df$B,df$A),r,dataframe,merge,summarization,R,Dataframe,Merge,Summarization,我有以下数据框: destiny origin Count 1 KJFK SBBR 4 2 KJFK SAEZ 4683 3 SBGL KJFK 2 4 SBBR KJFK 2 5 KJFK SBGL 4987 6 KJFK SBGR 12911 ... 命运起源计数 1 KJFK SBBR 4 2 KJFK SAEZ 4683 3 SBGL KJFK

我有以下数据框:

destiny origin Count 1 KJFK SBBR 4 2 KJFK SAEZ 4683 3 SBGL KJFK 2 4 SBBR KJFK 2 5 KJFK SBGL 4987 6 KJFK SBGR 12911 ... 命运起源计数 1 KJFK SBBR 4 2 KJFK SAEZ 4683 3 SBGL KJFK 2 4 SBBR KJFK 2 5 KJFK SBGL 4987 6 KJFK SBGR 12911 ... 因为我对这条路线很感兴趣,对我来说,KJFK->SBBR和SBBR->KJFK是一样的。所以我想把他们的总数加起来,如下表所示

destiny origin Count 1 KJFK SBBR 6 2 KJFK SAEZ 4683 3 SBGL KJFK 4989 4 KJFK SBGR 12911 ... 命运起源计数 1 KJFK SBBR 6 2 KJFK SAEZ 4683 3 SBGL KJFK 4989 4 KJFK SBGR 12911 ... 我不想用一个大for循环来计算所有的值,这个怎么样

library(tidyverse)
df %>%
    mutate_if(is.factor, as.character) %>%
    rowwise() %>%
    mutate(grp = paste0(sort(c(destiny, origin)), collapse = "_")) %>%
    ungroup() %>%
    group_by(grp) %>%
    summarise(Count = sum(Count)) %>%
    separate(grp, into = c("destiny", "origin"))
#        # A tibble: 4 x 3
#  destiny origin Count
#  <chr>   <chr>  <int>
#1 KJFK    SAEZ    4683
#2 KJFK    SBBR       6
#3 KJFK    SBGL    4989
#4 KJFK    SBGR   12911

这里有一个带有
pmin/pmax

library(tidyverse)
df1 %>%       
  group_by(destinyN = pmin(destiny, origin), originN = pmax(destiny, origin)) %>% 
  summarise(destiny = first(destiny), 
            origin = first(origin), 
            Count = sum(Count)) %>%
  ungroup %>%
  select(-destinyN, -originN)
# A tibble: 4 x 3
#  destiny origin Count
#  <chr>   <chr>  <int>
#1 KJFK    SAEZ    4683
#2 KJFK    SBBR       6
#3 SBGL    KJFK    4989
#4 KJFK    SBGR   12911
库(tidyverse)
df1%>%
分组依据(目的地=pmin(目的地,原点),原点=pmax(目的地,原点))%>%
总结(命运=第一(命运),
原点=第一(原点),
计数=总和(计数))%>%
解组%>%
选择(-destinn,-originN)
#一个tibble:4x3
#命运起源计数
#       
#1 KJFK SAEZ 4683
#2 KJFK SBBR 6
#3 SBGL KJFK 4989
#4 KJFK SBGR 12911
数据
df1它可以正常工作:)但是如果(is.factor,as.character)只格式化第二列,那么我会在前面将第一列转换为字符this@gustavoPacheco
mutate\u if
适用于
factor
列的所有列。也许您的第一列不是
因子
library(tidyverse)
df1 %>%       
  group_by(destinyN = pmin(destiny, origin), originN = pmax(destiny, origin)) %>% 
  summarise(destiny = first(destiny), 
            origin = first(origin), 
            Count = sum(Count)) %>%
  ungroup %>%
  select(-destinyN, -originN)
# A tibble: 4 x 3
#  destiny origin Count
#  <chr>   <chr>  <int>
#1 KJFK    SAEZ    4683
#2 KJFK    SBBR       6
#3 SBGL    KJFK    4989
#4 KJFK    SBGR   12911
df1 <- structure(list(destiny = c("KJFK", "KJFK", "SBGL", "SBBR", "KJFK", 
"KJFK"), origin = c("SBBR", "SAEZ", "KJFK", "KJFK", "SBGL", "SBGR"
), Count = c(4L, 4683L, 2L, 2L, 4987L, 12911L)), .Names = c("destiny", 
"origin", "Count"), row.names = c("1", "2", "3", "4", "5", "6"
), class = "data.frame")