代码之家  ›  专栏  ›  技术社区  ›  Nettle

具有逐项更改的数据形状

  •  0
  • Nettle  · 技术社区  · 8 年前

    以下数据的最佳形状是什么?

    对于给定的帐户,数据提供:

    • 帐户名
    • 请求的金额
    • 分项变更[括号内];总变更(无括号)
    • 提供的最终金额

    账户1总共需要100美元。拨款者在“增额”的数额上增加了10美元,但由于外币波动,减少了20美元。更改的总金额为-$10。所提供的总额为90美元。

    我如何以保留逐项解释的方式整理这些数据,但也允许分组、突变等。

    library(tidyverse)
    
    tibble(account = c("Account.1", "Account.1", "Account.1"),
           requested = c(100, NA, NA),
           changed  = c("-10", "[10]", "[-20]"),
           explanation = c(NA, "grade increase", "foreign currency adjustment"),
           provided = c(90, NA, NA) )
    
    #> # A tibble: 3 x 5
    #>   account   requested changed explanation                 provided
    #>   <chr>         <dbl> <chr>   <chr>                          <dbl>
    #> 1 Account.1       100 -10     <NA>                              90
    #> 2 Account.1        NA [10]    grade increase                    NA
    #> 3 Account.1        NA [-20]   foreign currency adjustment       NA
    ```
    

    于2018年6月19日由 reprex package (v0.2.0)。

    1 回复  |  直到 8 年前
        1
  •  1
  •   thelatemail    8 年前

    为了考虑引用完整性,我实际上会删除很多信息并将其分为两个表:

    totals <- dat[!is.na(dat$requested), -c(3,4,5)]
    changes <- dat[is.na(dat$requested), c(1,3,4)]
    changes$changed <- as.numeric(gsub("[][]","", changes$changed))
    
    totals
    
    #    account requested
    #1 Account.1       100
    
    changes
    
    #    account changed                 explanation
    #2 Account.1      10              grade increase
    #3 Account.1     -20 foreign currency adjustment
    

    这样你就可以计算出 totals$changed totals$provided 列通过 sum changes$changed 列并从中减去 totals$requested ,不存在创建任何冲突数据的风险。
    也没有 NA 现在任何列中的值。
    原始数字/字符数据的混合 changed 列也已被删除。