哈,因为它是基于州一级的,我把它们设置为地区一级,e增长与州一级相同,地区的基点(比率)不同。再次检查您的样本数据。您有五列名称相同的“growth_in_2016”,因此每行有四个(有一个重复)值作为单个变量。@heds1,这就是我的数据。但我会通过更改
哈,因为它是基于州一级的,我把它们设置为地区一级,e增长与州一级相同,地区的基点(比率)不同。再次检查您的样本数据。您有五列名称相同的“growth_in_2016”,因此每行有四个(有一个重复)值作为单个变量。@heds1,这就是我的数据。但我会通过更改,r,dataframe,dplyr,plyr,reshape2,R,Dataframe,Dplyr,Plyr,Reshape2,哈,因为它是基于州一级的,我把它们设置为地区一级,e增长与州一级相同,地区的基点(比率)不同。再次检查您的样本数据。您有五列名称相同的“growth_in_2016”,因此每行有四个(有一个重复)值作为单个变量。@heds1,这就是我的数据。但我会通过更改增长率来编辑我的帖子,以查看差异。因此,对于每个州和地区,您希望每年有12行,并且新计算的月度数据全年相同?在共享的示例中,由于您有5年的数据,因此每行将扩展为12 X 5=60行?出现以下错误:序列日期中的错误(as.Date(paste0(
哈,因为它是基于州一级的,我把它们设置为地区一级,e增长与州一级相同,地区的基点(比率)不同。再次检查您的样本数据。您有五列名称相同的“growth_in_2016”,因此每行有四个(有一个重复)值作为单个变量。@heds1,这就是我的数据。但我会通过更改增长率来编辑我的帖子,以查看差异。因此,对于每个
州和地区,您希望每年有12行,并且新计算的月度数据全年相同?在共享的示例中,由于您有5年的数据,因此每行将扩展为12 X 5=60行?出现以下错误:序列日期中的错误(as.Date(paste0(year,“-01-01”)),as.Date(paste0(年份::“from”的长度必须为1tried@Lalitha你共享的数据似乎对我有用。你有没有其他列没有显示在数据中?你能选择并运行显示的相同列,然后再次运行吗?我使用的是相同的数据。你能给我一些线索吗?@Lalitha我用我正在使用的数据更新了帖子。Can您尝试使用它吗?出现以下错误:seq.Date(as.Date(paste0(year,“-01-01”))中的错误,as.Date(paste0(年份::“from”的长度必须为1tried@Lalitha你共享的数据似乎对我有用。你有没有其他列没有显示在数据中?你能选择并运行显示的相同列,然后再次运行吗?我使用的是相同的数据。你能给我一些线索吗?@Lalitha我用我正在使用的数据更新了帖子。Ca你试着用它吗?你已经展示了输出,但这里我们只有年份数字而不是月度预测。请帮助我。谢谢Advance@Lalitha请在您的帖子中填写预期输出。不清楚您想要什么编辑了我的问题。另外,我的示例输出显示我希望使用日期格式,而不是使用相同的年份名称不同的增长率。请帮帮我。提前谢谢你显示了产出,但这里我们只有年度数据,而不是月度预测。请帮帮我。谢谢Advance@Lalitha请在您的帖子中填写预期的输出。不清楚您想要什么编辑了我的问题。另外,我的示例输出显示我希望有最新的结果格式,而不是有相同的年份名称与不同的增长率。请帮助我。提前感谢
structure(list(state = c("AP", "AP"), district = c("krishna",
"guntur"), rate = c(170104.5156, 1343.78134), growth_in_2016 = c(0.3844595,
0.3678), growth_in_2017 = c(0.444595, 0.8445), growth_in_2018 = c(0.323699,
0.36213), growth_in_2019 = c(0.5777, 0.35256), growth_in_2020 = c(0.2669097,
0.9097)), class = c("data.table", "data.frame"), row.names = c(NA,-2L), .internal.selfref = <pointer: 0x00000000026c1ef0>)
state district date rates
AP krishna 2016-12-31 x
AP krishna 2017-01-31 y
AP krishna 2017-02-28 z
AP krishna 2017-03-30 a
AP krishna 2017-04-31 b
AP krishna 2017-05-30 c
AP krishna 2017-06-31 d
library(dplyr)
library(tidyr)
df %>%
gather(key, value, -(1:3)) %>%
group_by(state, district, key) %>%
mutate(rate = (1 + rate * value)^(1/12) - 1,
year = sub(".*(\\d{4})", "\\1", key),
dates = list(seq(as.Date(paste0(year, "-01-01")),
as.Date(paste0(year, "-12-01")), by = "month")- 1)) %>%
unnest() %>%
mutate(rate = cumsum(rate)) %>%
select(-year)
# state district rate key value dates
# <chr> <chr> <dbl> <chr> <dbl> <date>
# 1 AP krishna 1.52 growth_in_2016 0.384 2015-12-31
# 2 AP krishna 3.04 growth_in_2016 0.384 2016-01-31
# 3 AP krishna 4.56 growth_in_2016 0.384 2016-02-29
# 4 AP krishna 6.08 growth_in_2016 0.384 2016-03-31
# 5 AP krishna 7.60 growth_in_2016 0.384 2016-04-30
# 6 AP krishna 9.12 growth_in_2016 0.384 2016-05-31
# 7 AP krishna 10.6 growth_in_2016 0.384 2016-06-30
# 8 AP krishna 12.2 growth_in_2016 0.384 2016-07-31
# 9 AP krishna 13.7 growth_in_2016 0.384 2016-08-31
#10 AP krishna 15.2 growth_in_2016 0.384 2016-09-30
# … with 110 more rows
df <- structure(list(state = c("AP", "AP"), district = c("krishna",
"guntur"), rate = c(170104.5156, 1343.78134), growth_in_2016 = c(0.3844595,
0.3678), growth_in_2017 = c(0.444595, 0.8445), growth_in_2018 = c(0.323699,
0.36213), growth_in_2019 = c(0.5777, 0.35256), growth_in_2020 = c(0.2669097,
0.9097)), class = c("data.table", "data.frame"), row.names = c(NA, -2L))
library(tidyverse)
out <- df %>%
mutate_at(vars(starts_with('growth')), list(~ (1 + rate * .)^(1/12) - 1)) %>%
gather(date, value, matches("growth")) %>%
mutate(date = str_remove(date, ".*_")) %>%
group_by(state, district) %>%
mutate(value = cumsum(value))
out %>%
filter(district == "krishna")
# A tibble: 5 x 5
# Groups: state, district [1]
# state district rate date value
# <chr> <chr> <dbl> <chr> <dbl>
#1 AP krishna 170105. 2016 1.52
#2 AP krishna 170105. 2017 3.07
#3 AP krishna 170105. 2018 4.55
#4 AP krishna 170105. 2019 6.16
#5 AP krishna 170105. 2020 7.60