2016-11-15 9 views
-2

私はRが新しく、すべての主題のベースラインとの日付差を計算しようとしています。私はdifftimeを使って日差を計算する方法を知っていますが、私は問題ごとにループでそれをやっています。どんな助けでも大歓迎です。日付差のためのループのネスト

基本的に私から行きたい:

IDのDATE
1 2015年1月1日
1 2016年1月1日
2 2017年1月1日
3 2017年1月1日
3 2016年1月1日
3 2017年1月1日

へ:

ID日付DATEDIFF
1 2015年1月1日0
1 2016年1月1日365
2 2017年1月1日0
3 2015年1月1日0
3 2016年1月1日365
3 2017年1月1日730

答えて

0

解析するlubridateを使用

library(lubridate) 
df <- data.frame(
    id = c(1,1,2,3,3,3), 
    date = c('1.1.2015','1.1.2016','1.1.2017','1.1.2015','1.1.2016','1.1.2017')) 
# parse dates as DayMonthYear 
df$date <- dmy(df$date) 
# calculate the difference to the oldest date in each group 
# mutate is called once for each group, so you could use an 
# arbitrary expression to calculate your new column only with 
# the data for this group 
df %>% group_by(id) %>% mutate(datediff = date-min(date)) 

結果:

  id  date datediff 
      
1  1 2015-01-01 0 days 
2  1 2016-01-01 365 days 
3  2 2017-01-01 0 days 
4  3 2015-01-01 0 days 
5  3 2016-01-01 365 days 
6  3 2017-01-01 731 days
日付とdplyrは、新しい列を計算します