我怎样才能获得
之后的累计和的新向量A:
year month day x y
.
.
.
2000 10 20 10 0
2000 10 21 2 0
2000 10 22 5 1
2000 10 23 9 0
.
.
.
如果“y”> 0然后,如何将下一个提及向量的这些范围中的“x”值相加:
B:对于y> 0的所有日期,从y> 0和前两天(5 + 2 + 10 = 17)的日期开始的x值之和。
C:对于y> 0的所有日期,在y> 0,即2000-11-10至2000-10-20的事件之前的两天之前10天的x值的总和。在这种情况下,2000-10-22是y> 0,然后将其分组并汇总在事件发生前2天的10天,其中y> 0。答案 0 :(得分:0)
要解决您的第一个问题,这是一个想法。我们可以创建一个名为Flag
的列,显示符合条件的行。在以下代码中,A2
是具有Flag
列的中间数据框。 Flag == 1
表示行y > 0
和前两行。
library(dplyr)
library(tidyr)
A2 <- A %>%
mutate(Flag1 = ifelse(y > 0, 1, NA)) %>%
mutate(Flag2 = lead(Flag1, 2)) %>%
fill(Flag1, .direction = "up") %>%
fill(Flag2, .direction = "down") %>%
mutate(Flag = Flag1 + Flag2 - 1)
A2
# year month day x y Flag1 Flag2 Flag
# 1 2000 10 20 10 0 1 1 1
# 2 2000 10 21 2 0 1 1 1
# 3 2000 10 22 5 1 1 1 1
# 4 2000 10 23 9 0 NA 1 NA
之后,我们可以过滤Flag == 1
并使用summarise
计算总和。 A3
是最终输出。
A3 <- A2 %>%
filter(Flag == 1) %>%
summarise(x_sum = sum(x))
A3
# x_sum
# 1 17
关于你的第二个问题,既然你没有提供一个好的示例数据集,至少对我来说,你不清楚你想要什么。我现在不会试着回答这个问题。如果你能提供适当的更新,我可能会考虑一下。
数据强>
A <- read.table(text = "year month day x y
2000 10 20 10 0
2000 10 21 2 0
2000 10 22 5 1
2000 10 23 9 0",
header = TRUE, stringsAsFactors = FALSE)