R中具有相同日期的行的迭代部分和
Posted
技术标签:
【中文标题】R中具有相同日期的行的迭代部分和【英文标题】:Iterative partial sum on rows with the same dates in R 【发布时间】:2022-01-02 04:11:49 【问题描述】:我想对表中的几行进行一些计算。 我在下面创建了一个示例:
library(dplyr)
set.seed(123)
year_week <- c(200045:200053, 200145:200152, 200245:200252)
input <- as.vector(sample(1:10,25,TRUE))
partial_sum <- c( 20,12,13,18,12,13,4,15,9,13,10,20,11,9,9,5,13,13,,8,13,11,15,14,7,14)
df <- data.frame(year_week, input, partial_sum)
给出的列是 input 和 year_week。后者表示日期,但在我的情况下,这些值是数字的,前 4 位数字表示年份,后两位表示该年的工作周。 我需要的是在每年的每一周进行迭代,并总结其他年份相同周的值,并将结果保存到此处称为 partial_sum 的列中。当前值不包括在总和中。 2000 年的第 53 周将得到相同的处理,但在这种情况下,我只有一圈年,因此它的值 3 不会改变。
知道如何制作吗? 谢谢
【问题讨论】:
partial_sum 中的预期输出是否正确?我看到你正在使用sample
没有set.seed
对不起,我已经更正了
【参考方案1】:
我希望这样的事情会起作用,尽管正如 cmets 中指出的那样,您的示例并不完全可重现。
library(dplyr)
df %>%
mutate(week = substr(year_week, 5, 6)) %>%
group_by(week) %>%
mutate(result = sum(input))
【讨论】:
我已添加更正。结果并不是我所需要的,因为它总结了每一个thingle 列。 是仅前几年的总和还是除当年之外的所有年份的总和?如果您需要省略当前年份,只需从总和中减去它:partial_sum = sum(input) - input)
。【参考方案2】:
也许这有帮助 - 通过采用 substring
按“周”分组,得到“输入”和“输入”的 sum
之间的差异
library(dplyr)
df %>%
group_by(week = substring(year_week, 5)) %>%
mutate(partial_sum2 = sum(input) - input)
【讨论】:
谢谢。解决方案几乎是正确的。缺少的是检查闰年,即数据中是否还有其他 53 周应用相同的规则,如果没有,则保留输入值。以上是关于R中具有相同日期的行的迭代部分和的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL 选择具有开始和结束日期的行,如果某些重叠合并行