2016-03-21 20 views
1

Uzun formatta veri içeren ve bir zaman dizisi nesnesine dönüştürülmesi gereken bir flat-csv dosyası var. Dosyanın biçimi şu şekildedir: i komple mevcut kez birkaç bölge gözlemleri içeren her kimlik grubu için farklı bir zaman-serisi var kiR Başlangıç ​​Soruları Veri Dizisi Zaman Serisine Dönüştürme

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 

Ben, kimliğine göre ve ardından bölgeye göre gruplandırmak istediğiniz -span.

+0

Evet. Toplamda yaklaşık 13 kimliğim var ve her bir kimlik için ayrı bir zaman serisi nesnesi oluşturmak istiyorum. – narain

cevap

1

OP'nin sorusunu yanlış anladım.

Orijinal veri çerçevesini kırmak için tapply kullanabilirsiniz (D). Bu biraz zor. Kolayca her ID temel zaman ofseti içeren yeni bir sütun yaratacak tapply

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 

Bu in D değiştiremez.

Düzenleme: En iyi uygulama olarak değerlendirilmeyen değerlendirme için '=' kullanıyorum. Onları yukarıda değiştirdim.

0

As.Date işlevini kullanabilirsiniz. Tablo, read.table ("filename.csv") kullanarak yükleyin. Read.table çağrısında dizeleriAsFactors = FALSE belirtmediğiniz sürece tarihler faktör olarak yüklenir. Bununla birlikte, tüm karakter sütunlarına uygulanır.

yüzden,

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

hile yapmak gerekir.

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

Teknik olarak değil: as.character

fazla bilgi tarihleri ​​onlar faktörler olarak yüklenmiş olsa bile dizeleri as.Date şekilde iletilmesini garanti edecektir bir csv dosyası çünkü "c" "c" "virgül" anlamına gelir. Ayırıcılarınız boşluktur. Ancak, çağrıda sep = '' seçeneğini belirlerseniz read.csv çağrısını kullanabilirsiniz.

+0

Verileri başarılı bir şekilde aldım ve tarih sütununu bir tarih değişkeni olarak bildirdim, ancak sahip olduğum ana sorun hala varolan verileri birkaç timeSeries nesnesine ayırıyor. – narain

+0

Tamam, sorunuzu yanlış anladım. Bunu yapmak için tapply'yi kullanabilirsiniz. Yeni bir cevap vereceğim veya yukarıdakileri düzenleyeceğim. – DAV