[英]How to capture percent change in R
I really need your help, any support will be much appreciated.我真的需要你的帮助,任何支持将不胜感激。
This is the example data:这是示例数据:
tibble::tribble(
~Item, ~Amount, ~Date,
"saw", 10L, "01/01/2020",
"saw", 20L, "04/01/2020",
"saw", 5L, "03/06/2020",
"saw", 30L, "02/07/2020",
"nails", 300L, "02/02/2020",
"nails", 200L, "04/03/2020",
"nails", 250L, "05/03/2020",
"nails", 400L, "10/05/2020"
)
I am trying to create a new column next to date that captures the percent change in amount for each item from one date to the next.我正在尝试在 date 旁边创建一个新列,该列捕获每个项目从一个日期到下一个日期的百分比变化。
The result would look like:结果将如下所示:
tibble::tribble(
~Item, ~Amount, ~Date, ~`%.change`,
"saw", 10L, "01/01/2020", "0%",
"saw", 20L, "04/01/2020", "100%",
"saw", 5L, "03/06/2020", "-75%",
"saw", 30L, "02/07/2020", "500%",
"nails", 300L, "02/02/2020", "0%",
"nails", 200L, "04/03/2020", "-33%",
"nails", 250L, "05/03/2020", "25%",
"nails", 400L, "10/05/2020", "60%"
)
The formula for percent change: (new observation- original observation)/original observation * 100百分比变化的公式:(新观测值-原始观测值)/原始观测值 * 100
And for the first date for each item, when there still hasn't been any change value of 0 or empty cell.对于每个项目的第一个日期,当仍然没有任何更改值 0 或空单元格时。
Again any help will be much appreciated, and huge thanks in advance!!再次任何帮助将不胜感激,并在此先感谢!
You can group by the Item
column then, to get the "original observation" for your calculation, use dplyr::lag
.然后,您可以按Item
列分组,以获得计算的“原始观察”,使用dplyr::lag
。 This will make the first item in each group NA
, so use an ifelse
to change it to 0%.这将使每个组中的第一项成为NA
,因此使用ifelse
将其更改为 0%。
library(dplyr)
df %>%
group_by(Item) %>%
mutate(`%.change` = scales::percent((Amount - lag(Amount))/lag(Amount)),
`%.change` = ifelse(is.na(`%.change`), "0%", `%.change`))
#> # A tibble: 8 x 4
#> # Groups: Item [2]
#> Item Amount Date `%.change`
#> <chr> <int> <chr> <chr>
#> 1 saw 10 01/01/2020 0%
#> 2 saw 20 04/01/2020 100%
#> 3 saw 5 03/06/2020 -75%
#> 4 saw 30 02/07/2020 500%
#> 5 nails 300 02/02/2020 0%
#> 6 nails 200 04/03/2020 -33%
#> 7 nails 250 05/03/2020 25%
#> 8 nails 400 10/05/2020 60%
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.