簡體   English   中英

R基於多個條件減去值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM