在R中更改日期列组织

时间:2015-02-09 10:15:27

标签: r

我有一个数据框,包含一行,一个变量,一个开始日期和结束日期,以及一个唯一的ID:

ID    Start    End       Var
521   12/1/14  20/1/14   46
212   2/4/13   4/4/13    91
541   17/3/14  21/3/14   76
729   11/8/14  14/8/14   232

... e.tc

我想将它转换为更传统的形式,例如输入lm样式函数,即

Date     ID    Var  
12/1/14  521   23
19/1/14  521   23
......

26/3/14  541   76

... e.t.c

主要挑战是平均Var在相应日期的平均值,ID列可能用于执行此操作,但我不知道如何。

以前是否有人这样做过,知道这样做的方法还是认为不可能?

2 个答案:

答案 0 :(得分:2)

要获得天数差异,首先必须将StartEnd转换为POSIXct的日期格式。然后你可以转换为星期,除以7。 给出(假设dd是您的data.frame):

dd$Start = as.POSIXct(cc, format="%d/%m/%y")
dd$End = as.POSIXct(cc, format="%d/%m/%y")
dd$Ellapsed = as.numeric(dd$End - dd$Start) / 7
dd$Var = dd$Var / dd$Ellapsed
dd = dd[c("Ellapsed", "ID", "Var")]

答案 1 :(得分:2)

要以lm一种方式处理日期,请先将日期转换为as.POSIXct类型:

数据

df <- read.table(header=T, text='ID    Start    End       Var
521   12.1.14  14.1.14   47
212   2.4.13   4.4.13    91
541   17.3.14  21.3.14   76
729   11.8.14  14.8.14   232')

<强>解决方案

例如,仅在模型中使用“开始”:

df$Start <- as.POSIXct(df$Start, format='%d.%m.%Y')

<强>输出

> lm(Var ~ Start, data=df)

Call:
lm(formula = Var ~ Start, data = df)

Coefficients:
(Intercept)        Start  
  1.597e+05    2.585e-06  

另一种方法是使用专门用于时间序列的zoo包。

要以lm一种方式处理日期,请先将日期转换为as.POSIXct类型:

数据

df <- read.table(header=T, text='ID    Start    End       Var
521   12.1.14  14.1.14   47
212   2.4.13   4.4.13    91
541   17.3.14  21.3.14   76
729   11.8.14  14.8.14   232')

<强>解决方案

例如,仅在模型中使用“开始”:

df$Start <- as.POSIXct(df$Start, format='%d.%m.%y')

<强>输出

> lm(Var ~ Start, data=df)

Call:
lm(formula = Var ~ Start, data = df)

Coefficients:
(Intercept)        Start  
  1.597e+05    2.585e-06  

另一种方法是使用专门用于时间序列的zoo包。

修改

所以你需要平均数周。然后,您可以执行以下操作:

#These need to be POSIXct
df$Start <- as.POSIXct(df$Start, format='%d.%m.%y')
df$End   <- as.POSIXct(df$End, format='%d.%m.%y')

#calculate the difference of start and End Dates in weeks
df$diff  <- as.numeric((df$End - df$Start)/7) 

#divide Var by the diff column calculated above
df$averaged_var <- df$Var / df$diff 

根据需要使用上面的averaged_var运行回归。