【发布时间】:2018-04-08 14:21:15
【问题描述】:
set.seed(123)
df <- data.frame(loc.id = rep(1:3,each = 3*5),
year = rep(rep(1981:1983, each = 5), times = 3),
week = rep(rep(20:24, times = 3), times = 3),
cumsum.val = runif(min = -2, max = 4, 5*3*3))
数据包含3 locations X 3 years X 5 weeks 和一个名为cumsum.val 的值。对于每个位置和年份,我想找到cumsum.val > 1 所在的周数。然后,如果连续出现cumsum.val > 1 的两周,则选择第一周。一个例子
test <- df[df$loc.id == 1 & df$year == 1981,]
test$cumsum.test <- test$cumsum.val > 1 # weeks where cumsum.val > 1
head(test)
loc.id year week cumsum.val cumsum.test
1 1 1981 20 -0.2745349 FALSE
2 1 1981 21 2.7298308 TRUE
3 1 1981 22 0.4538615 FALSE
4 1 1981 23 3.2981044 TRUE
5 1 1981 24 3.6428037 TRUE
现在选择 TRUE 连续出现两次的第一周,在上述情况下是周 23(因为周 23 和 24 都是 TRUE)。
如何为df 实现此功能。可能没有连续两周出现cumusm.val > 1。在这种情况下,只需选择cumsum.val > 1 所在的第一周
【问题讨论】:
-
试试
inx <- rev(c(FALSE, diff(rev(test$cumsum.test)) == 0)); test[inx, ]。 -
这行得通。我如何为整个
df实现这个
标签: r dplyr data.table cumsum