汇总R数据框中独立于顺序的列,(df$A,df$B)=(df$B,df$A)
我有以下数据框: 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循环来计算所有的值,这个怎么样汇总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
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@gustavoPachecomutate\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")