具有逐项更改的数据形状

时间:2018-06-20 04:03:13

标签: r tidyverse data-munging

下面进行整洁分析的最佳数据形状是什么?

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

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

帐户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
```

reprex package(v0.2.0)于2018-06-19创建。

1 个答案:

答案 0 :(得分:1)

为了实现参照完整性,我实际上会丢弃很多信息,并将其分为2个表:

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$changedtotals$requested列,而没有创建风险任何有冲突的数据。
现在,任何一列中都没有NA值。
原始changed列中数字/字符数据的混合也已删除。