簡體   English   中英

數據幀中的時間序列:對數據重新排序

[英]time-series in a data frame: re-order data

我有一個由以下結構的測量軟件生成的時間序列數據集:

ID1 ID2 START   mes1    mes2    mes3    mes4    mes5    mes6
myidA   aa  2000    12  58  45  66  88  77
myidB   aa  2004    44  89  NA  NA  NA  NA
myidC   ab  2001    69  58  77  88  87  NA
myidD   ab  2004    78  66  NA  NA  NA  NA

START表示較舊的測量年份,該年份保存在第一個測量列(mes1)中。 對於每個樣本(數據框的每一行),開始年份可以不同。

我想創建以下數據框,其中按年份對測量進行排序(用測量的年數代替n°測量):

ID1 ID2 START   2000    2001    2002    2003    2004    2005
myidA   aa  2000    12  58  45  66  88  77
myidB   aa  2004    NA  NA  NA  NA  44  89
myidC   ab  2001    NA  69  58  77  88  87
myidD   ab  2004    NA  NA  NA  NA  78  66

我可能必須使用時間序列對象,但我不知道如何處理ID(我需要保留它們)和START。

這是我要采取的方法:

library(reshape2)
dfL <- melt(mydf, id.vars=c("ID1", "ID2", "START"))
dfL <- dfL[complete.cases(dfL), ]
head(dfL)
#     ID1 ID2 START variable value
# 1 myidA  aa  2000     mes1    12
# 2 myidB  aa  2004     mes1    44
# 3 myidC  ab  2001     mes1    69
# 4 myidD  ab  2004     mes1    78
# 5 myidA  aa  2000     mes2    58
# 6 myidB  aa  2004     mes2    89

dfL$year <- dfL$START + as.numeric(gsub("mes", "", dfL$variable))-1

dcast(dfL, ID1 + ID2 + START ~ year, value.var="value")
#     ID1 ID2 START 2000 2001 2002 2003 2004 2005
# 1 myidA  aa  2000   12   58   45   66   88   77
# 2 myidB  aa  2004   NA   NA   NA   NA   44   89
# 3 myidC  ab  2001   NA   69   58   77   88   87
# 4 myidD  ab  2004   NA   NA   NA   NA   78   66

基本思想是利用“ mes1”,“ mes2”值將值“推”到新擴展的data.frame中的正確位置。


這是我使用的“ mydf”,以防其他任何人想刺中此事。

mydf <- structure(
  list(ID1 = c("myidA", "myidB", "myidC", "myidD"), 
       ID2 = c("aa", "aa", "ab", "ab"), 
       START = c(2000L, 2004L, 2001L, 2004L), 
       mes1 = c(12L, 44L, 69L, 78L), mes2 = c(58L, 89L, 58L, 66L), 
       mes3 = c(45L, NA, 77L, NA), mes4 = c(66L, NA, 88L, NA), 
       mes5 = c(88L, NA, 87L, NA), mes6 = c(77L, NA, NA, NA)), 
  .Names = c("ID1", "ID2", "START", "mes1", "mes2", "mes3", 
             "mes4", "mes5", "mes6"), class = "data.frame", 
  row.names = c(NA, -4L))
mydf
#     ID1 ID2 START mes1 mes2 mes3 mes4 mes5 mes6
# 1 myidA  aa  2000   12   58   45   66   88   77
# 2 myidB  aa  2004   44   89   NA   NA   NA   NA
# 3 myidC  ab  2001   69   58   77   88   87   NA
# 4 myidD  ab  2004   78   66   NA   NA   NA   NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM