【发布时间】:2019-10-17 10:02:03
【问题描述】:
我有这样的长格式数据:
library(tidyverse)
df <- data.frame(
projection1 = c(2,4,3),
projection2 = c(3,1,4),
historical_data = c(2,3,4),
time = c(1,2,3)
) %>%
as_tibble() %>%
gather(key = key, value = val, projection1:historical_data) %>%
mutate(key = key %>% factor())
然后数据如下所示:
# A tibble: 9 x 3
time key val
<dbl> <fct> <dbl>
1 1 projection1 2
2 2 projection1 4
3 3 projection1 3
4 1 projection2 3
5 2 projection2 1
6 3 projection2 4
7 1 historical_data 2
8 2 historical_data 3
9 3 historical_data 4
现在,我想计算每年从projection1 和projection2 的值相对于history_data 的相对差异。因此,我希望我的数据最终是这样的:
# A tibble: 9 x 4
time key val pct_diff
<dbl> <fct> <dbl> <dbl>
1 1 projection1 2 1
2 2 projection1 4 1.33
3 3 projection1 3 0.75
4 1 projection2 3 1.5
5 2 projection2 1 0.333
6 3 projection2 4 1
7 1 historical_data 2 1
8 2 historical_data 3 1
9 3 historical_data 4 1
我总是最终拆分和合并以获得新的看似冗余的列,其中包含已经存在于当前 dataframe/tibble 中的值来进行计算。我想知道是否有优雅的dplyr 或 data.table 解决方案?或者,也许您可以将我引导到已经回答的问题。我自己没遇到过。
谢谢
【问题讨论】:
标签: r dataframe dplyr data.table