【发布时间】:2019-10-23 11:28:08
【问题描述】:
我有一个时间序列,我想生成一个新变量,该变量等于上一年变量value 的值。
我的问题是,在时间序列的第一年,当我生成滞后变量时,我得到了 NA。 value 的内容遵循重复模式,但 id 的模式不同。
理论上,应该能够对观察到的value序列进行模式匹配,并使用已知模式填充滞后变量中的NA,但我不知道如何解决这个问题。
我尝试将模式序列连接到数据,并将其转换为宽,因此我为序列的每个元素添加了三个新列。我在想我可能能够以某种方式根据去年的数据值循环遍历列。但由于序列的性质,我意识到我需要对整个序列进行模式匹配,而不是一次只匹配一个值。
data <- tibble(
year=rep(2015:2018,3),
id=c(rep('A',4),rep('B',4),rep('C',4)),
value=c('CG','SB','CG','CG',
'CG','CG','CG','CG',
'CG','SB','CG','SB')
)
data.seq <- tibble(
seq1=c('CG','CG','SB'),
seq2=c('CG','CG',NA),
seq3=c('CG','SB',NA)
)
# Generate new variable that has 'value' of previous year
data <- data %>%
group_by(id) %>%
mutate(
lagValue = lag(value)
)
# Need to fill in the NA's based on the sequences in data.seq
为了帮助回答这个问题,我手动输入了给定data.seq 中序列的 NA 的输出:
expected.data <- data
expected.data[c(1,5,9),'lagValue'] <- c('CG','CG','SB')
【问题讨论】:
-
你能发布预期的输出吗?
标签: r time-series tidyverse