R:在步骤12中子集/提取数据帧的行

  • 本文关键字:提取 数据帧 子集 r subset
  • 更新时间 :
  • 英文 :


我有一个数据框架,其中包含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为步长进行计数。

有人知道如何解决这个问题,或者知道更好的方法吗?

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()

您可以使用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次(。

最新更新