首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:汇总行以将每月数据转换为季度数据

R:汇总行以将每月数据转换为季度数据
EN

Stack Overflow用户
提问于 2022-03-17 01:40:35
回答 2查看 431关注 0票数 1

我有一个每月观测的数据。每一行代表一个月。我需要把它转换成一个有季度观测的数据。换句话说,我需要将月份1-3汇总成Q1,4-6表示Q2,等等。

代码语言:javascript
复制
survey1 <- data.frame("col1" = c(10, 10, 10, 20, 20, 20),
                     "col2" = c(10, 15, 12, 30, 33, 35),
                     "col3" = c(12, 12, 12, 22, 22, 22))

因为我想用不同的操作聚合列,所以它变得更棘手了。

在每个季度中,Column1和第3列都是常量:它们对第一个月、第二个月和第三个月的数值相同。

另一方面,列2确实记录了每个月的不同值。我想总结一下第2栏中每季度观察新数据的所有值。

换句话说,我想从下面的survey1survey2

代码语言:javascript
复制
survey2 <- data.frame("col1" = c(10, 20),
                     "col2" = c(37, 98),
                     "col3" = c(12, 22))

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-17 01:55:32

您可以将每3行划分为四分之一,并计算每个变量的汇总统计数据。因为col1col3在每个季度都有相同的值,所以我们可以从这些列中选择任何值,所以我选择了第一个。

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

survey1 %>%
  group_by(Quarter = paste0('Q', ceiling(row_number()/3))) %>%
  summarise(across(c(col1, col3), first), 
            col2 = sum(col2)) %>%
  select(Quarter, col1, col2, col3)

#  Quarter  col1  col2  col3
#  <chr>   <dbl> <dbl> <dbl>
#1 Q1         10    37    12
#2 Q2         20    98    22

黑客也可以使用col1col3作为分组变量,因为我们知道它们每个季度都是相同的。如果每个季度的col1col3组合都有不同的价值,这将是可行的。

代码语言:javascript
复制
survey1 %>% 
    group_by(col1, col3) %>% 
    summarise(col2 = sum(col2), .groups = 'drop')
票数 3
EN

Stack Overflow用户

发布于 2022-03-17 02:24:55

我提供了另一个解决方案

column

  • group_by

  • 创建一个模拟月份的列(按行动态展开)

  • ,然后为cols2 1和3创建季度

  • ,取最小值,因为它不会更改cols2的

  • ,取之和

G 211

代码语言:javascript
复制
survey1 %>% 
  mutate(months=1:dim(survey1)[1],
         quarter=lubridate::quarter(months)) %>% 
  group_by(quarter) %>% 
  summarize(col1_min=min(col1),
            col2_sum=sum(col2),
            col3_min=min(col3))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71506142

复制
相关文章

相似问题

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