首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何求r组连续n天的均值

如何求r组连续n天的均值
EN

Stack Overflow用户
提问于 2018-10-21 11:10:04
回答 1查看 497关注 0票数 1

我有一个数据文件,其中包含id(包含重复)、日期(包含重复)、值。这些数值连续记录不同的日子。现在,我想要的是用id和date(作为连续的n天)对数据进行分组,并找到值的平均值。如果最后一组不包含n天,则返回NA。

代码语言:javascript
复制
id  date          value
 1  2016-10-5       2
 1  2016-10-6       3
 1  2016-10-7       1
 1  2016-10-8       2
 1  2016-10-9       5
 2  2013-10-6       2
 .  .               .
 .  .               .
 .  .               .
 20 2012-2-6        10

期望输出,连续n天为3。

代码语言:javascript
复制
  id  date      value  group_n_consecutive_days     mean_n_consecutive_days
   1  2016-10-5  2         1                        2
   1  2016-10-6  3         1                        2
   1  2016-10-7  1         1                        2
   1  2016-10-8  2         2                        NA
   1  2016-10-9  5         2                        NA
   2  2013-10-6  2         1                        4
   .
   .
   .
   .
    20 2012-2-6  10         6                       25         
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-21 13:46:36

问题中的数据是在id中排序和连续的,所以我们假设情况是这样的。同样,当问题涉及重复日期时,我们假设这意味着不同的id值可以有相同的日期,但在id中,日期是唯一的和连续的。现在,使用注释2中所示的数据,由id在最终组中重复使用,并使用gl计算组号。然后用idgroup_no对较小的组进行分组,取3组或NA组的平均值。

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

DF %>% 
  group_by(id) %>%
  mutate(group_no = c(gl(n(), 3, n()))) %>%
  group_by(group_no, add = TRUE) %>%
  mutate(mean = if (n() == 3) mean(value) else NA) %>%
  ungroup

给予:

代码语言:javascript
复制
# A tibble: 6 x 5
     id date       value group_no  mean
  <int> <date>     <int>    <int> <dbl>
1     1 2016-10-05     2        1     2
2     1 2016-10-06     3        1     2
3     1 2016-10-07     1        1     2
4     1 2016-10-08     2        2    NA
5     1 2016-10-09     5        2    NA
6     2 2013-10-06     2        1    NA

注1

gl(...)的替代方案可以是cumsum(rep(1:3, length = n()) == 1)if (n() = 3) mean(value) else NA的替代方案可以是mean(head(c(value, NA, NA), 3))

注2

以可复制形式输入的数据被假定为:

代码语言:javascript
复制
Lines <- "id  date          value
 1  2016-10-5       2
 1  2016-10-6       3
 1  2016-10-7       1
 1  2016-10-8       2
 1  2016-10-9       5
 2  2013-10-6       2"
DF <- read.table(text = Lines, header = TRUE)
DF$date <- as.Date(DF$date)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52914669

复制
相关文章

相似问题

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