2017-11-08 2 views
0

:SUMIFS - 특정 열을 여러 기준의 오프 하위 집합을 만들고 합산 I 유사한 패널 데이터 세트가

city <- c("ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR", "ARI", "ATL", "BAL", "BUF", "CAR") 
week <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5) 
df <- as.data.frame(cbind(city, week)) 
df$week <- as.numeric(df$week) 
df$x <- c(6, 3, 9, 12, 4, 3, 7, 8, 2, 12, 15, 6, 3, 9, 0, 14, 18, 2, 21, 15, 17, 9, 10, 1, 22) 

내가, df$y을 새 변수를 만들고 싶습니다, 그 df$x을 요약 각 도시에 대해, 그리고 매주, 현재 관찰되는 주 전에. 따라서 이 31이므로 df$y[25]31과 같아야합니다.

내 질문은 자동으로 수행하는 함수에 어떻게 써야합니까?

sum(df[df$city == "CAR" & df$week < 5, 3])을 각 팀과 주간 조합에 사용하는 것은 지루한 작업입니다. 내 자연스러운 성향은 df$y <- sum(df[df$city == df$city & df$week < df$week, 3])과 같은 것을 쓰는 것이지만 그건 의미가 없습니다. 나는 R에 익숙하지 않고 기능을 완전히 이해하지 못한다. 하지만, 내가하려는 일을위한 최선의 경로인가?

도움 주셔서 감사합니다.

+0

data.table와 함께'만들려면 자료. 논리 비교가 정확하지 않습니다. 데이터를 생성하려면'data.frame()'을 사용해야합니다. –

답변

0

하나의 옵션이`as.data.frame (cbind (...))를 사용하기 때문에 어쨌든 작동하지 않을 것 dplyr

library(dplyr) 
res <- df %>% 
     group_by(city) %>% 
     mutate(y = cumsum(lag(x, default = 0))) 
res[25,] 
# A tibble: 1 x 4 
# Groups: city [1] 
# city week  x  y 
# <fctr> <dbl> <dbl> <dbl> 
#1 CAR  5 22 31 
0

하나의 옵션

setDT(df)[, y := c(0, cumsum(x[-length(x)])), by = 'city'] 
df 
관련 문제