我有一个数据集z,我希望按以下类型计算增长增长:
location size type date
ny 5 hello 10/01/2020
ny 7 ai 10/02/2020
ny 8 ai 10/03/2020
ny 6 hello 10/04/2020
ca 15 cool 10/05/2020
ca 10 name 10/06/2020
ca 5 name 10/07/2020
ca 16 cool 10/08/2020期望输出
location type increase percent_increase start_date end_date
ca cool 1 6.67% 10/05/2020 10/08/2020
ca name -5 -50% 10/6/2020 10/7/2020
ny hello 1 20% 10/01/2020 10/4/2020
ny ai 1 14.28% 10/2/2020 10/3/2020这就是我要做的:
library(tidyverse)
z %>%
group_by(type, location) %>%
mutate(percent_increase = (size/lead(size) - 1) * 100)我没有得到我想要的输出。如能提供任何协助,我们将不胜感激。
发布于 2020-11-03 04:03:50
要获得所需的结果,需要在mutate行中进行不同的计算:
我还添加了一个filter来删除NA对percent_increase变量的任何结果。
最后,添加‘arrange’按位置按字母顺序排序,以匹配与请求输出相同的顺序。
码
Z %>% group_by(类型,位置) %>%变异(增加=(铅(大小)-大小),percent_increase =(增大/大小)* 100,start_date =日期,end_date =铅(日期) %>%过滤器(!is.na(Percent_increase)) %>%排列(位置)
输出
# A tibble: 4 x 8
# Groups: type, location [4]
location size type date increase percent_increase start_date end_date
<chr> <int> <chr> <chr> <int> <dbl> <chr> <chr>
1 ca 15 cool 10/05/2020 1 6.67 10/05/2020 10/08/2020
2 ca 10 name 10/06/2020 -5 -50 10/06/2020 10/07/2020
3 ny 5 hello 10/01/2020 1 20 10/01/2020 10/04/2020
4 ny 7 ai 10/02/2020 1 14.3 10/02/2020 10/03/2020输入
z <- structure(list(location = c("ny", "ny", "ny", "ny", "ca", "ca",
"ca", "ca"), size = c(5L, 7L, 8L, 6L, 15L, 10L, 5L, 16L), type = c("hello",
"ai", "ai", "hello", "cool", "name", "name", "cool"), date = c("10/01/2020",
"10/02/2020", "10/03/2020", "10/04/2020", "10/05/2020", "10/06/2020",
"10/07/2020", "10/08/2020")), class = "data.frame", row.names = c(NA,
-8L))发布于 2020-11-03 03:58:17
您缺少按日期组织的排列功能
就像这样:
z %>%
group_by(type, location) %>%
arrange(date) %>%
mutate(percent_increase = (size/lead(size) - 1) * 100)https://stackoverflow.com/questions/64656384
复制相似问题