如何解决差异以减少频率
我有几个月度时间序列存储在一个文件中,我想使用R来使lag = 2与之不同,以便每季度获取一次,即3个月等于四分之一,我想在第三个月与第一个月之间进行区别。这将使我每季度只观察一次,而不是三个。但是我编写的apply函数不能满足我的要求。
我的数据:
Time TimeSeries_1 TimeSeries2
1980-01 200 1200
1980-02 300 1300
1980-03 400 1400
1980-04 500 1500
1980-05 600 1600
1980-06 700 1700
.
.
1980-12 1300 2700
我的功能:
data_diff = apply(data,MARGIN = 1,function(x) diff(x,lag = 2))
我想得到的东西:
1980-Q1 200 (=400-200)
1980-Q2 200 (=700-50)
1980-Q3 ...
1980-Q4 ...
数据框的尺寸不变,我不明白为什么这种转换不起作用。非常感谢!
在没有任何MARGIN参数的情况下,使用sapply()
代替PS也不起作用。
解决方法
在基数R中,您将执行以下操作:
setTimeout(function(){ $(".myclass > [myattr=50]").hover(()=>console.log("d")); },500);
,
这是一种稍微冗长的tidyverse
方法,但是在没有空格的情况下,它应该返回每个季度正确命名的所有变量。
library(tidyverse)
dat <- tribble(~Time,~ TimeSeries1,~TimeSeries2,"1980-01",100,1000,"1980-02",300,1300,"1980-03",400,"1980-04",500,1500,"1980-05",600,1600,"1980-06",900,1700,"1980-07",200,1200,"1980-08","1980-09",750,1400,"1980-10","1980-11","1980-12",700,1700)
dat %>%
mutate(Time = paste0(gsub("[0-9]{2}$","",Time),quarters(as.Date(paste0(Time,"-01"))))
) %>%
nest_by(Time) %>%
mutate(data = summarise(data,across(everything(),~ diff(.x,lag = 2)))) %>%
unpack(data)
#> # A tibble: 4 x 3
#> Time TimeSeries1 TimeSeries2
#> <chr> <dbl> <dbl>
#> 1 1980-Q1 300 300
#> 2 1980-Q2 400 200
#> 3 1980-Q3 550 200
#> 4 1980-Q4 200 200
由reprex package(v0.3.0)于2020-08-17创建
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。