我有一个每月观测的数据。每一行代表一个月。我需要把它转换成一个有季度观测的数据。换句话说,我需要将月份1-3汇总成Q1,4-6表示Q2,等等。
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栏中每季度观察新数据的所有值。
换句话说,我想从下面的survey1到survey2。
survey2 <- data.frame("col1" = c(10, 20),
"col2" = c(37, 98),
"col3" = c(12, 22))谢谢
发布于 2022-03-17 01:55:32
您可以将每3行划分为四分之一,并计算每个变量的汇总统计数据。因为col1和col3在每个季度都有相同的值,所以我们可以从这些列中选择任何值,所以我选择了第一个。
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黑客也可以使用col1和col3作为分组变量,因为我们知道它们每个季度都是相同的。如果每个季度的col1和col3组合都有不同的价值,这将是可行的。
survey1 %>%
group_by(col1, col3) %>%
summarise(col2 = sum(col2), .groups = 'drop')发布于 2022-03-17 02:24:55
我提供了另一个解决方案
column
G 211
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))https://stackoverflow.com/questions/71506142
复制相似问题