簡體   English   中英

使用帶有重置的dplyr的R累積和

[英]R cumulative sum using dplyr with reset

我正在嘗試制作一個表,該表計算按如下所示的“狀態”和“ p”列分組的連續年數:

    data_right <- data.table(state = c("NY", "NY", "NY", "NY", "NY","NY", "PA", 
    "PA", "PA", "PA", "PA", "PA"), p = c("n", "n","n","n", "p", "p", "n", "n", "n", 
    "p", "p", "p"),Year = c("1973", "1974", "1977", "1978", "1988", "1989" ,"1991", 
    "1992", "1993", "1920", "1929", "1931"), Consecutive_Yrs = 
    c(1,2,1,2,1,2,1,2,3,1,1,1))

我現在正在使用的代碼無法正常工作。 我正在嘗試dplyr中的mutate和group_by語句,但沒有運氣。 我也不能使用data.table包,因為我的R version不是最新的。

非常感謝獲得此輸出的任何幫助!

library(dplyr)
data_right %>%
  group_by(state, p) %>%
  mutate(grp = cumsum(c(TRUE, diff(as.integer(Year)) > 1))) %>%
  group_by(state, p, grp) %>%
  mutate(cy = row_number()) %>%
  ungroup() %>%
  select(-grp)
# # A tibble: 12 x 5
#    state p     Year  Consecutive_Yrs    cy
#    <chr> <chr> <chr>           <dbl> <int>
#  1 NY    n     1973                1     1
#  2 NY    n     1974                2     2
#  3 NY    n     1977                1     1
#  4 NY    n     1978                2     2
#  5 NY    p     1988                1     1
#  6 NY    p     1989                2     2
#  7 PA    n     1991                1     1
#  8 PA    n     1992                2     2
#  9 PA    n     1993                3     3
# 10 PA    p     1920                1     1
# 11 PA    p     1929                1     1
# 12 PA    p     1931                1     1

假設數據已按Year排序。


數據:

data_right <- data.table(state = c("NY", "NY", "NY", "NY", "NY","NY", "PA", "PA", "PA", "PA", "PA", "PA"), p = c("n", "n","n","n", "p", "p", "n", "n", "n", "p", "p", "p"),Year = c("1973", "1974", "1977", "1978", "1988", "1989" ,"1991", "1992", "1993", "1920", "1929", "1931"), Consecutive_Yrs = c(1,2,1,2,1,2,1,2,3,1,1,1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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