2017-06-20 25 views
0

我的數據只是2列 - 當某些事情開始時,它開始的日期是 我想保持總共打開的事件數量。R:按日期保留未決問題的數量

例如,這裏是我的數據:

Issue  Day Started Day Stopped 
A   7-01-2013 Still Open 
B   7-04-2013 7-06-2013 
C   7-09-2013 7-10-2013 
D   7-09-2013 7-11-2013 
E   7-09-2013 Still Open 
F   7-11-2013 Still Open 

這是我想我的數據是什麼樣子:

Date  Issues Open 
7-01-2013 1 
7-02-2013 1 
7-03-2013 1 
7-04-2013 2 
7-05-2013 2 
7-06-2013 1 
7-07-2013 1 
7-08-2013 1 
7-09-2013 4 
7-10-2013 3 
7-11-2013 3 

如何得到這個任何提示?謝謝!

+0

SQL或r?你在找哪個解決方案?如果sql,標記您正在使用的dbms。 –

+0

你可以試試我的解決方案〜我不確定是否有更整潔的方式。 – Wen

回答

0

感謝Wen指出我原來的答案沒有回答OP的請求。我想補充的專tidyverse答案:

library(dplyr) 
library(tidyverse) 

DF$Stopped[is.na(DF$Stopped)] <- max(DF$Started)+1 
DF %>% 
    group_by(Issue) %>% 
    nest() %>% 
    mutate(data = map(data, ~ seq(.x$Started, .x$Stopped-1, 1))) %>% 
    unnest() %>% 
    group_by(data) %>% 
    summarise(OpenIssues=sum(!is.na(Issue))) 
+0

這不是OP想要的 – Wen

+0

你能澄清OP想要什麼嗎? – CPak

+0

根據您的數據打開案例數量,在2017-01-03應該有6個案例仍然開放 – Wen

1
df[df=='Still Open']='3000-01-01'# small trick 
df$Day.Started=as.Date(df$Day.Started) 
df$Day.Stopped=as.Date(df$Day.Stopped) 
df1=data.frame(Date=seq(as.Date("2013/07/01"), by = "day", length.out = 20)) 

df1['Issues Open']=NA 

for (i in 1:dim(df1)[1]){ 

    df1$`Issues Open`[i]=sum(df$Day.Started<=df1$Date[i]&df$Day.Stopped>df1$Date[i]) 
} 

> df1 
     Date Issues Open 
1 2013-07-01   1 
2 2013-07-02   1 
3 2013-07-03   1 
4 2013-07-04   2 
5 2013-07-05   2 
6 2013-07-06   1 
7 2013-07-07   1 
8 2013-07-08   1 
9 2013-07-09   4 
10 2013-07-10   3 
11 2013-07-11   3