【问题标题】:How can i match values inside the same dataframe?如何匹配同一数据框中的值?
【发布时间】:2020-11-04 01:12:27
【问题描述】:

我的数据框如下所示:

  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 的 Destination 和来自 ARG 的 Origen,第 4 行具有从 CHL 到 ARG 和 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

先谢谢了。

【问题讨论】:

    标签: r data-science


    【解决方案1】:

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

    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
    

    如果df$group &lt;- NULL 不需要,则删除group 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      相关资源
      最近更新 更多