【发布时间】:2019-07-03 11:57:02
【问题描述】:
我想知道某一天会有多少动物出现。这张图表描述了人们提前登记他们的动物。
例如,在7 几天前,有人注册了他们的4 猫以出现在5/3/2019 上;在6 几天前,另一只9 猫注册了5/3/2019。所以7+6=13 猫会出现在5/3/2019 上。
当days_ahead = 0 时,仅表示有人在活动当天注册。例如,4 wolves 在5/1/2019 上注册了5/1/2019(提前0 天),那一天将会有4 wolves。
library(dplyr)
set.seed(0)
animal = c(rep('cat', 5), rep('dog', 6), rep('wolf', 3))
date = sample(seq(as.Date("2019/5/1"), as.Date('2019/5/10'), by='day'), 14, replace=TRUE)
days_ahead = sample(seq(0,14), 14, replace=FALSE)
number = sample.int(10, 14, replace=TRUE)
dt = data.frame(animal, date, days_ahead, number) %>% arrange(animal, date)
预期结果应该具有与示例相同的1-3 列,但第四列应该是每个date 的累加数,在days_ahead 上累加。
我在这里添加了一个预期的结果。 comments 用于解释accumulated_number 列。
我考虑过loop 函数,但不完全确定如何循环三个变量(cat、date 和 days_ahead)。任何建议表示赞赏!
【问题讨论】:
-
问题不是很清楚,部分原因是文中的描述与示例数据不符。此外,尚不清楚日期和未来天数之间的关系 - 是否应从前者中减去后者以给出注册日期?这将有助于改进示例数据。
-
感谢您的 cmets!我添加了预期的输出。
-
使用基础 R
ave你可以做到with(dt, ave(number, animal, date, FUN = cumsum))
标签: r loops for-loop dplyr aggregate