R初学者问题数据帧转换为时间序列

时间:2016-03-21 08:27:38

标签: r time-series

我有一个包含长格式数据的flat-csv文件,需要转换为时间序列对象。该文件的格式如下所示:

DATE       ID  REGION VALUE
2016-03-10 10  DE001  2332,23
2016-03-10 10  DE001  2332,23
2016-03-10 10  DE002  2332,23
2016-03-10 11  DE001  2332,23
2016-03-10 11  DE002  2332,23
2016-03-10 12  DE001  2332,23
2016-03-11 10  DE001  2332,23
2016-03-11 10  DE001  2332,23
2016-03-11 10  DE002  2332,23
2016-03-11 11  DE001  2332,23
2016-03-11 11  DE002  2332,23
2016-03-11 12  DE001  2332,23

我想按ID分组,然后按区域分组,这样我就每个ID组都有不同的时间序列,其中包含完整可用时间跨度的多个区域观察值。

2 个答案:

答案 0 :(得分:1)

我误解了OP的问题。

您可以使用tapply来分解原始数据框(称之为D)。 这有点棘手。你不能轻易改变tapply中的D

D$relTime <- NA 

L=tapply(1:nrow(D),D$ID, function(x) {
    # x contains the row numbers for each ID
    RT <- data.frame(row=x)
    T0 <- D$DATE[x][1]
    RT$val <- D$DATE[x]-T0 # if time series means offset from a base time
    RT
})
DL <- do.call('rbind',L)
# assuming you want it in  D
D$relTime[DL$row] <- DL$val

这将创建一个新列,其中包含每个ID与基准时间的偏移量。

编辑:我使用'='进行分配,这不是最佳做法。我在上面改了它们。

答案 1 :(得分:0)

您可以使用as.Date函数。 使用read.table加载表(&#34; filename.csv&#34;)。除非您在read.table调用中指定stringsAsFactors = FALSE,否则日期将作为因子加载。但是,这样做将适用于所有字符列。

所以,

D <- read.table("file.csv")
D$DATE <- as.Date(as.character(D$DATE), "%Y-%m-%d")

应该做的伎俩。 as.character将确保日期作为字符串传递给as.Date,即使它们已作为因子加载

更多信息:

https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.Date.html

https://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html

从技术上讲,它不是csv文件,因为&#34; c&#34; in&#34; csv&#34;意思是&#34;逗号&#34;。你的分隔符是空格。但是如果你指定sep =&#39;你仍然可以使用read.csv调用。 &#39;在电话中。