簡體   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