如何解决R:以12的步长细分/提取数据帧的行
我有一个数据框架,其中包含26年期间(1993年至2019年)每个月的数据,总共有312行。 不幸的是,我不得不滞后于数据,所以每年的时间现在是从7月t到6月t + 1。所以我不能只是从日期中提取年份。
现在,我想在单独的数据框中排除每年的12个月数据。我的第一个想法是将年份插入第一列,然后使用lapply函数进行过滤。
为此,我创建了以下循环:
n <- 1
m <- 1993
for (a in 1:26) {
for (i in n:(n+11)) {
t.monthly.ret.lag[i,1] <- m
}
n <- n+1
m <- m+1
}
不幸的是,R不是以12为步长来命名年份,而是以1为步长直接计数。
有人知道如何解决这个问题,或者知道更好的解决方法吗?
解决方法
您可以使用rep()
和seq()
创建一个长度为312个元素的向量,给出年份(一个给出月份)。然后,您可以将它们作为附加列附加到data.frame或仅将它们用作月份和年份的参考。
month = rep(seq(1:12),27)
year = c(matrix(rep(seq(1:27),12),ncol=27,byrow=T)+1992)
month = month[7:(length(month)-6)]
year = year[7:(length(year)-6)]
月份向量从1到12,从6开始计数,年份向量将年份重复12次(第一次和最后一次仅重复6次)。
,y.first <- 1993
y.last <- 2019
month.col <- rep(c(7:12,1:6),y.last-y.first+1)
year.col <- rep(c(y.first:y.last),each=length(month.name))
df <- data.frame(year=year.col,month=month.col)
这会产生一个带有相应标记的月份和年份的数据框,从而进一步允许使用dplyr::group_by()
,依此类推。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。