首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建前几天的和,但忽略时间t的值?

如何创建前几天的和,但忽略时间t的值?
EN

Stack Overflow用户
提问于 2015-04-24 23:42:21
回答 2查看 99关注 0票数 1

我有这个带t列的df。我想创建列t2和t3

  • t2给出了t-2和t-3的和。
  • t3给出了t-2,t-3,t-4等的和.

这是数据

代码语言:javascript
复制
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在积累中的值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-25 02:48:47

根据动物园的roll定义一个rollapplyr函数并使用它。注意,rollapplyr width参数list(-seq(k))意味着使用指定的偏移量。例如,如果k=2,则等于list(c(-1, -2)),这意味着使用1和2的先验值。

代码语言:javascript
复制
library(zoo)

roll <- function(t, k) rollapplyr(t, list(-seq(k)), sum, fill = NA)
transform(df, t2 = roll(t, 2), t3 = roll(t, 3))

另一种选择是:

代码语言:javascript
复制
roll <- function(t, k) rollsumr(t, k+1, fill = NA) - t

给予:

代码语言:javascript
复制
      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

代码语言:javascript
复制
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")
票数 1
EN

Stack Overflow用户

发布于 2015-04-25 00:00:43

我不太明白你所说的“我不想在积累的时候使用t值”是什么意思。下面的呢?

代码语言:javascript
复制
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 12
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29859274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档