나는 2003 년 이래로 강우량의 기록이있는 데이터 세트를 가지고있다. 또 다른 데이터 세트는 2003 년부터 지금까지의 샘플링 날짜 정보를 포함하고있다. 샘플링 날짜 사이의 비를 합산하려고합니다 (date.per.year
이라는 객체 참조).R에서 시간 범위 사이의 값의 합을 계산하는 방법?
I found this 그러나 값의 벡터를 사용하고 싶습니다 (간격 [X, Y [, c2 = 합계 (비가 [Y, Z [c3 = sum Z, A [등)
date.per.year = structure(c(12110, 12460, 12815, 13196, 13564.5, 13930, 14321,
14652, 15028, 15408, 15792, 16106), .Names = c("2003", "2004",
"2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012",
"2013", "2014"))
날짜 및 비 데이터 프레임인지 상상이 :
df = data.frame(Dates = seq(as.Date("2003/1/1"),
as.Date("2015/1/1"), "days"),
rain = rnorm(length(seq(as.Date("2003/1/1"), as.Date("2015/1/1"), "days"))))
I에게 also tried this하지만 사용할 수있는 쓰레기통 만드는 아니에요 :
## create corresponding intervals
splits <- cut(date.per.year, median, breaks=date.per.year)
Warning message:
In split.default(df$rain, f = splits) :
data length is not a multiple of split variable
## split df$rain into intervals and sum them
lapply(split(df$rain, f=splits), sum)
을
또는 even this는 :
library(data.table)
DT <- data.table(df)
setkey(DT, rain, Dates)
DT[, sumSum := DT[ .(.BY[[1]], .d+(-5:-1))][, sum(sum, na.rm=TRUE)] , by=list(date.per.year, .d=Dates)]
Error in `[.data.table`(DT, , `:=`(sumSum, DT[.(.BY[[1]], .d + (-5:-1))][, : The items in the 'by' or 'keyby' list are length (12,4384). Each must be same length as rows in x or number of rows returned by i (4384).
DT
내가하고 싶은 것을의 그림은 다음과 같습니다. 빨간색 선은 내가 합산하고자하는 범위를 만드는 날짜라고 가정합니다 (이는 date.per.year
개체 임). 결국, 나는 다른 범위의 합계 11 값을 가져야한다. 이것을 할 수 있습니까?