R中带日期的总和

R中带日期的总和,r,dplyr,cumsum,R,Dplyr,Cumsum,我想构建一个“累积总和”,计算在相关观察开始之前已结束的一组观察的数量 我更喜欢使用dplyr来回答问题,但优先考虑低内存开销,因为这是一个庞大的数据集 在下面的MWE中,我想创建的变量称为“previor_ended_obs” mwe% 突变(开始=mdy(开始), end=mdy(end))%>% 分组依据(分组)%>% 突变(滞后=滞后(结束), 一=1, 总和=总和(个)-1) 试试: mwe% 突变(开始=mdy(开始), end=mdy(end))%>% 分组依据(分组)%>% 变异

我想构建一个“累积总和”,计算在相关观察开始之前已结束的一组观察的数量

我更喜欢使用dplyr来回答问题,但优先考虑低内存开销,因为这是一个庞大的数据集

在下面的MWE中,我想创建的变量称为“previor_ended_obs”

mwe%
突变(开始=mdy(开始),
end=mdy(end))%>%
分组依据(分组)%>%
突变(滞后=滞后(结束),
一=1,
总和=总和(个)-1)
试试:

mwe%
突变(开始=mdy(开始),
end=mdy(end))%>%
分组依据(分组)%>%
变异(
previor_ended_obs=sapply(1:n(),函数(x)sum(end[1:(x-1)]
输出:

# 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
#一个tible:12 x 4
#分组:分组[2]
组开始结束之前\u结束\u obs
1a 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
6a 1990-01-041990-01-053
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

对不起,我不明白你想做什么。我想我被困在了“计算在这一组开始之前已经结束的观察的数量”部分。不知道“这一行”是什么意思,也不知道当这么多行有重叠的日期时,如何确定顺序。请你澄清一下好吗?正如@ulfeld提到的,这有点让人困惑。你能在信中写更多的描述吗package@GoGonzo你能用mwe解释sum_run是如何工作的吗?
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