0

我的数据名声如下:

df <- read.table( text = "ID           Date              Value
001          2012-01-15        8.6
003          2000-05-03        10.1
001          2005-03-30        7.3
1002         2013-07-05        1.4" , h = TRUE , stringsAsFactors = FALSE )

#    ID       Date Value
#1    1 2012-01-15   8.6
#2    3 2000-05-03  10.1
#3    1 2005-03-30   7.3
#4 1002 2013-07-05   1.4

我正在尝试获取每个 ID 的初始日期,然后获取该 ID 的每个后续值的月数。我可以使用聚合来简单地获得每个 ID 的最小日期,但我对如何做剩下的事情感到困惑。

关于如何做到这一点的任何想法?我是 R 的新手,所以任何指针都将不胜感激。

4

2 回答 2

0

我会做类似下面的事情。对于几个月而不是几天,看看这个问题:两个日期之间的月数

for(i in df$ID){   
  dates <- as.Date(as.vector(df[df$ID==i,"Date"]))   
  if(length(dates)>1){
    for(j in 2:length(dates)){
      days <- as.double(difftime(dates1[j],dates1[1],units="days"))
      //do something
    }   
  } 
}
于 2013-09-13T16:59:30.803 回答
0

我可能会将一个ddply和解决方案与transform一篇文章中使用的方法结合起来,这将需要安装和加载包和. 不过,我不确定将最小日期后的月份包括为 0 是否对您有用。plyrzoo

# Load packages    
require(plyr)
require(zoo)

# Convert "Date" to a date
df$Date = as.Date(df$Date)
ddply(df, .(ID), transform, 
      mon.since.min = (as.yearmon(Date) - as.yearmon(min(Date)))*12 )
于 2013-09-13T19:11:22.257 回答