我有一个包含长格式数据的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组都有不同的时间序列,其中包含完整可用时间跨度的多个区域观察值。
答案 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;在电话中。