r - 使用 dplyr/tidyr 在 R 中格式化/生成新表
问题描述
我有一个使用 df 计算的表格,如下所示。
Month_considered pct `ATC Count`
<fct> <dbl> <fct>
1 Apr-17 54.9 198,337
2 May-17 56.4 227,681
3 Jun-17 58.0 251,664
4 Jul-17 57.7 251,934
5 Aug-17 55.5 259,617
6 Sep-17 55.7 245,588
7 Oct-17 56.6 247,051
8 Nov-17 57.6 256,375
9 Dec-17 56.9 277,784
10 Jan-18 56.7 272,818
现在我想找到两个月之间的 pct 差异。所以所需的输出就像
Month_considered pct
<fct> <dbl>
1 Apr-17-May-17 1.5
2 May-17-Jun-17 1.6
3 Jun-17-Jul-17 - 0.3
如何像上面那样连接第一列。我确实尝试使用unite
intidyr
但它不是我想要生成的输出。谢谢。
解决方案
我们需要取当前值和下一个值之间的差值
library(dplyr)
library(zoo)
df1 %>%
arrange(as.yearmon(Month_considered, format = "%b-%y")) %>% # to order
mutate_at(vars(Month_considered, pct),
funs(new = lead(., default = last(.)))) %>%
unite(Month_considered, Month_considered, Month_considered_new, sep="-") %>%
transmute(Month_considered, pct = pct_new - pct)
# Month_considered pct
#1 Apr-17-May-17 1.5
#2 May-17-Jun-17 1.6
#3 Jun-17-Jul-17 -0.3
#4 Jul-17-Aug-17 -2.2
#5 Aug-17-Sep-17 0.2
#6 Sep-17-Oct-17 0.9
#7 Oct-17-Nov-17 1.0
#8 Nov-17-Dec-17 -0.7
#9 Dec-17-Jan-18 -0.2
#10 Jan-18-Jan-18 0.0
或使用base R
pct <- df1$pct[-1] - df1$pct[-nrow(df1)]
Month_considered <- paste(df1$Month_considered[-1],
df1$Month_considered[-nrow(df1)], sep="-")
data.frame(Month_considered, pct)
推荐阅读
- vhdl - VHDL 中的 SDRAM 控制器
- python - 如何在将图像保存在opencv python中的同时增加图像的大小
- c# - Datetimepicker 数据绑定自定义类型
- material-ui - 如何更改 material-ui fab 的高度?
- android - 当我在 kotlin 中初始化变量时遇到一些问题
- jenkins - 错误:在 Jenkins 报告中连接 ECONNREFUSED 127.0.0.1:9090
- excel - 如何将项目添加到列表框
- javascript - 如何使用 JavaScript 将 JSON 显示到 html 表中?
- android - SAF - lastModified() 值不反映对云存储上的文件夹的修改
- python - 将列表分组到特定组