簡體   English   中英

R 中帶有日期的 cumsum

[英]cumsum with dates in R

我想構建一個“累積和”,計算在有問題的觀察開始之前已經結束的組中觀察的數量。

我更喜歡使用 dplyr 的答案,但優先考慮低內存開銷,因為這是一個巨大的數據集。

下面的 MWE,我想創建的變量稱為“prior_ended_obs”。

mwe <- data.frame(group = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "b"),
                    start = c("1/1/1990", "1/2/1990", "1/3/1990", "1/3/1990", "1/3/1990", "1/4/1990", "1/5/1990", "1/6/1990", "1/7/1990", "1/1/1990", "1/2/1990", "1/3/1990"),
                    end   = c("1/2/1990", "1/2/1990", "1/3/1990", "1/4/1990", "1/5/1990", "1/5/1990", "1/5/1990", "1/6/1990", "1/8/1990", "1/1/1990", "1/2/1990", "1/3/1990"),
                    prior_ended_obs = c(0, 0, 2, 2, 2, 3, 4, 7, 8, 0, 1, 2)) %>%
  mutate(start = mdy(start),
         end = mdy(end)) %>%
  group_by(group) %>%
  mutate(lag_end = lag(end),
         ones = 1,
         cumsum = cumsum(ones)-1)

嘗試:

mwe <- data.frame(group = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "b"),
                  start = c("1/1/1990", "1/2/1990", "1/3/1990", "1/3/1990", "1/3/1990", "1/4/1990", "1/5/1990", "1/6/1990", "1/7/1990", "1/1/1990", "1/2/1990", "1/3/1990"),
                  end   = c("1/2/1990", "1/2/1990", "1/3/1990", "1/4/1990", "1/5/1990", "1/5/1990", "1/5/1990", "1/6/1990", "1/8/1990", "1/1/1990", "1/2/1990", "1/3/1990"),
                  prior_ended_obs = c(0, 0, 2, 2, 2, 3, 4, 7, 8, 0, 1, 2)) %>%
  mutate(start = mdy(start),
         end = mdy(end)) %>%
  group_by(group) %>%
  mutate(
    prior_ended_obs = sapply(1:n(), function(x) sum(end[1:(x-1)] < start[x], na.rm = TRUE))
  )

輸出:

# A tibble: 12 x 4
# Groups:   group [2]
   group start      end        prior_ended_obs
   <fct> <date>     <date>               <int>
 1 a     1990-01-01 1990-01-02               0
 2 a     1990-01-02 1990-01-02               0
 3 a     1990-01-03 1990-01-03               2
 4 a     1990-01-03 1990-01-04               2
 5 a     1990-01-03 1990-01-05               2
 6 a     1990-01-04 1990-01-05               3
 7 a     1990-01-05 1990-01-05               4
 8 a     1990-01-06 1990-01-06               7
 9 a     1990-01-07 1990-01-08               8
10 b     1990-01-01 1990-01-01               0
11 b     1990-01-02 1990-01-02               1
12 b     1990-01-03 1990-01-03               2

暫無
暫無

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

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