繁体   English   中英

计算自第一个事件 R 以来经过的天数

[英]Calculate number of days passed since First event R

我想计算自第一个事件以来已经过去的天数。 有不同的组,所以每个组的事件开始日期不同,我想计算每个组自他们自己的第一个事件以来经过的天数。

names = c('Ben',"Ben","Ben","Ben","Ben","Ben" ,'Dan',"Dan","Dan","Dan", 'Peter',"Peter","Peter","Peter","Peter","Peter","Peter",'Betty',"Betty","Betty",'Betty', "Betty")
dates = c('2000-02-01','2000-02-02',"2000-02-03","2000-02-04",'2000-02-05','2000-02-05', '2000-01-11','2000-01-12',"2000-01-13",'2000-01-14',
           '2000-09-10','2000-09-11',"2000-09-12",'2000-09-13','2000-09-14','2000-09-15','2000-09-16','2000-11-13','2000-11-14', "2000-11-15",'2000-11-16','2000-11-17')
events = c(0,0,1,4,5,11,0,0,2,6,0,0,1,2,3,4,5,0,0,1,2,3)
newd = data.frame(names,dates,events)
newd

所以数据框看起来像这样:

> newd
   names     dates events
1    Ben 2000-02-01      0
2    Ben 2000-02-02      0
3    Ben 2000-02-03      1
4    Ben 2000-02-04      4
5    Ben 2000-02-05      5
6    Ben 2000-02-05     11
7    Dan 2000-01-11      0
8    Dan 2000-01-12      0
9    Dan 2000-01-13      2
10   Dan 2000-01-14      6
11 Peter 2000-09-10      0
12 Peter 2000-09-11      0
13 Peter 2000-09-12      1
14 Peter 2000-09-13      2
15 Peter 2000-09-14      3
16 Peter 2000-09-15      4
17 Peter 2000-09-16      5
18 Betty 2000-11-13      0
19 Betty 2000-11-14      0
20 Betty 2000-11-15      1
21 Betty 2000-11-16      2
22 Betty 2000-11-17      3

这只是我正在使用的一个例子,“事件”没有特定的顺序并且完全是随机的,还有许多其他日期的事件为 0。所以我只想开始计算事件的天数:事件 > 0 . 因此,如果“事件”中有一个 0,那么也应该计算为 0 天。

将日期转换为实际日期,然后您可以减去每个names的最短日期。

newd$dates <- as.Date(newd$dates)

library(dplyr)
newd %>% group_by(names) %>% mutate(events = as.integer(dates - min(dates)))

#   names dates      events
#   <chr> <date>      <int>
# 1 Ben   2000-02-02      0
# 2 Ben   2000-02-03      1
# 3 Ben   2000-02-04      2
# 4 Ben   2000-02-05      3
# 5 Ben   2000-02-05      3
# 6 Dan   2000-01-12      0
# 7 Dan   2000-01-13      1
# 8 Dan   2000-01-14      2
# 9 Peter 2000-09-11      0
#10 Peter 2000-09-12      1
#11 Peter 2000-09-13      2
#12 Peter 2000-09-14      3
#13 Peter 2000-09-15      4
#14 Peter 2000-09-16      5
#15 Betty 2000-11-14      0
#16 Betty 2000-11-15      1
#17 Betty 2000-11-16      2
#18 Betty 2000-11-17      3

在基地 R 中:

newd$events <- with(newd, dates - ave(dates, names, FUN = min))

data.table

library(data.table)
setDT(newd)[, events := dates - min(dates), names]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM