[英]R subtracting values based on multiple conditions
給定一個數據框,其中包含多年、位置(州)和月份的多個觀察結果。 如:
df <- data.frame(
year = c(1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1997, 1997,
1997, 1997, 1997, 1997, 1998),
state = c(12, 10, 12, 23, 24, 25, 33, 51, 9, 12, 10, 12, 23, 24, 25, 12),
month = c(1, 4, 4, 4, 4, 4, 4, 5, 5, 1, 4, 4, 4, 4, 4, 1),
value = c(206466, 33474, 13670, 10597, 116669, 963675, 17834, 61573, 510190,
315668, 37276, 30302, 60156, 122951, 1106655, 987834))
我想計算每個州每月價值年度變化的變化。
例如,對於狀態 12,我想計算 1996 年到 1997 年的變化(109202 即 315668 - 206466)和 1997 年到 1998 年的變化(672166 即 987834-315668)。 理想情況下,這將針對每年和州進行計算,以提供特定於州的年度月度變化。
我知道這可以通過多個 for 循環來完成,但我寧願避免這種情況。 任何建議,將不勝感激。
我們可以按 'state'、'month' 分組,按 'year' arrange
並獲得當前和之前的 'value' 之間的差異( lag
)
library(dplyr)
out <- df %>%
group_by(state, month) %>%
arrange(year, .by_group = TRUE) %>%
mutate(Diff = value - lag(value))
out %>%
filter(state == 12)
# A tibble: 5 x 5
# Groups: state, month [2]
# year state month value Diff
# <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1996 12 1 206466 NA
#2 1997 12 1 315668 109202
#3 1998 12 1 987834 672166
#4 1996 12 4 13670 NA
#5 1997 12 4 30302 16632
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.