我有这个带t列的df。我想创建列t2和t3
这是数据
year t t2 t3
19620101 1 NA NA
19630102 2 NA NA
19640103 3 3 NA
19650104 4 5 6
19650104 5 7 9
19650104 6 9 12这个问题的一个稍微不同的版本在这里:How can I create sum of previous days?
基本上,我不想使用时间t在积累中的值。
发布于 2015-04-25 02:48:47
根据动物园的roll定义一个rollapplyr函数并使用它。注意,rollapplyr width参数list(-seq(k))意味着使用指定的偏移量。例如,如果k=2,则等于list(c(-1, -2)),这意味着使用1和2的先验值。
library(zoo)
roll <- function(t, k) rollapplyr(t, list(-seq(k)), sum, fill = NA)
transform(df, t2 = roll(t, 2), t3 = roll(t, 3))另一种选择是:
roll <- function(t, k) rollsumr(t, k+1, fill = NA) - t给予:
year t t2 t3
1 19620101 1 NA NA
2 19630102 2 NA NA
3 19640103 3 3 NA
4 19650104 4 5 6
5 19650104 5 7 9
6 19650104 6 9 12注意:我们用它作为df
df <-
structure(list(year = c(19620101L, 19630102L, 19640103L, 19650104L,
19650104L, 19650104L), t = 1:6), .Names = c("year", "t"), row.names = c(NA,
-6L), class = "data.frame")发布于 2015-04-25 00:00:43
我不太明白你所说的“我不想在积累的时候使用t值”是什么意思。下面的呢?
library(dplyr)
df %>% mutate(t2 = lag(t,1) + lag(t,2), t3 = lag(t,1) + lag(t,2) + lag(t,3))
date t t2 t3
1 1-01-20 1 NA NA
2 1-01-21 2 NA NA
3 1-01-22 3 3 NA
4 1-01-23 4 5 6
5 1-01-24 5 7 9
6 1-01-25 6 9 12https://stackoverflow.com/questions/29859274
复制相似问题