首页 > 解决方案 > 如何匹配同一数据框中的值?

问题描述

我的数据框如下所示:

  destination origen iso3_exp Importer    flow      iso3_imp    gdp_o      gdp_d      distw  año
1    ABW    AUT       40      533    188.782      ABW 240457629696 1320670336  8632.9708 1995
2    AUT    ABW       58      533    912.362      ABW 289122615296 1320670336  7843.2555 1995
3    CHL    ARG       76      533   4535.649      ABW 768951320576 1320670336  4431.5712 1995
4    ARG    CHL      156      533    496.458      ABW 728007573504 1320670336 14590.9239 1995
5    AUT    BEL      170      533 116442.845      ABW  92507275264 1320670336   929.5887 1995

我需要创建一个名为 totalflow 的变量,它是与 Origen-Destination 匹配的行之间的变量“flow”之和,例如:第 3 行具有到 CHL 的目的地和来自 ARG 的 Origen,第 4 行具有到 ARG 的目的地并且来自 CHL 的 origen 我需要将该行 (3) 的流与第 4 行的流相加,并对所有其他行执行相同的操作。

  destination origen iso3_exp Importer    flow      iso3_imp    gdp_o      gdp_d  distw  año   totalflow
1    ABW    AUT       40      533      188.782      ABW 240457629696 1320670336  8632.9708 1995  1100
2    AUT    ABW       58      533      912.362      ABW 289122615296 1320670336  7843.2555 1995  1100
3    CHL    ARG       76      533     4535.649      ABW 768951320576 1320670336  4431.5712 1995  5031
4    ARG    CHL      156      533      496.458      ABW 728007573504 1320670336 14590.9239 1995  5031
5    AUT    BEL      170      533   116442.845      ABW  92507275264 1320670336   929.5887 1995 116442

预先感谢。

标签: rdata-science

解决方案


创建一个已排序的起始值和目的地值的组列。

df$group <- with(df,paste0(pmax(destination, origen),pmin(destination, origen)))

一旦你有了,你可以按列分组并group计算sumflow

#Base R
df$totalflow <- with(df, ave(flow, group, FUN = sum))

#dplyr
library(dplyr)
df %>% group_by(group) %>% mutate(total_flow  =sum(flow))

#data.table
library(data.table)
setDT(df)[, totalflow := sum(flow), group]

这返回:

df
#  destination origen iso3_exp Importer       flow iso3_imp        gdp_o
#1         ABW    AUT       40      533    188.782      ABW 240457629696
#2         AUT    ABW       58      533    912.362      ABW 289122615296
#3         CHL    ARG       76      533   4535.649      ABW 768951320576
#4         ARG    CHL      156      533    496.458      ABW 728007573504
#5         AUT    BEL      170      533 116442.845      ABW  92507275264

#       gdp_d      distw  año  group  totalflow
#1 1320670336  8632.9708 1995 AUTABW   1101.144
#2 1320670336  7843.2555 1995 AUTABW   1101.144
#3 1320670336  4431.5712 1995 CHLARG   5032.107
#4 1320670336 14590.9239 1995 CHLARG   5032.107
#5 1320670336   929.5887 1995 BELAUT 116442.845

group如果不需要该列,则将其删除df$group <- NULL


推荐阅读