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)

给出的列是 inputyear_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 选择具有开始和结束日期的行,如果某些重叠合并行

Mysql按日期时间的日期部分分组,并为每个日期选择具有最大日期时间的行

查找具有部分匹配的行

如何用R将列中相同值的行值分组? [复制]

合并具有部分相同值的行

计算R中具有相似值的行的平均值