2012-05-16 22 views
2

我有一個R相關的問題,這是與必須閱讀許多文件和處理這些文件。 每個文件都用於測量在不同時間在不同時間點製造的臭氧。這些數據是在一個表格式,我可以使用讀取數據:使用文件名來平均數據按月

files <- list.files() 
data <- lapply(files, read.table, skip=19) 

這讓我對所有這一切,我想現在過程的文件的數據幀。例如,這些文件被命名爲:

> head(files) 
[1] "fiji_19980105.dat" "fiji_19980112.dat" "fiji_19980119.dat" 
[4] "fiji_19980130.dat" "fiji_19980206.dat" "fiji_19980213.dat" 

其中「斐濟」是電臺的名稱,日期是YMD格式。我想平均數據幀來獲得該站的月平均值(我只需要一次在一個站上工作,所以實際上我只是想平均稱爲數據的數據幀來產生12組平均數據)。

我想我可以使用一些?應用函數來做到這一點,但我真的失去了如何做到這一點。對解決方案的任何建議都非常感謝!

由於添加日期數據幀的結果的例子在這裏我們有:

> head(dat) 
V1  V2 V3 V4 V5 V6 V7 V8 V9 V10  Date 
1 9000 1007.7 0.006 29.6 74 0.59 0.006 9000 9000 9000 1998-01-05 
2 9000 1005.2 0.028 29.3 75 0.62 0.006 9000 9000 9000 1998-01-05 
3 9000 1001.6 0.060 28.5 78 0.63 0.006 9000 9000 9000 1998-01-05 

> str(dat) 
'data.frame': 153994 obs. of 11 variables: 
$ V1 : int 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ... 
$ V2 : num 1008 1005 1002 997 993 ... 
$ V3 : num 0.006 0.028 0.06 0.104 0.14 0.169 0.198 0.238 0.271 0.301 ... 
$ V4 : num 29.6 29.3 28.5 27.9 27.6 27.2 27 26.6 26.2 26 ... 
$ V5 : int 74 75 78 79 80 81 82 84 85 85 ... 
$ V6 : num 0.59 0.62 0.63 0.68 0.69 0.7 0.72 0.74 0.75 0.76 ... 
$ V7 : num 0.006 0.006 0.006 0.007 0.007 0.007 0.007 0.008 0.008 0.008 ... 
$ V8 : num 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ... 
$ V9 : num 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ... 
$ V10 : num 9000 9000 9000 9000 9000 9000 9000 9000 9000 9000 ... 
$ Date: Date, format: "1998-01-05" "1998-01-05" ... 
+0

所以你想每列的平均值?聚合,而不是tapply然後 – mdsumner

回答

1

有了您的文件列表,得到Date S:

datetimes = as.Date(files, "fiji_%Y%m%d") 

詳見?strptime關於格式模板,本質上你可以包括任何其他值作爲文字填充符,並忽略任何不重要的尾隨字符。

其餘的要求您提供有關每個data.frame中的內容的更多信息,請向我們提供有關這些數據的更多信息。

最好創建一個大數據框,並將這些日期標記添加到每一行,然後從那裏開始。

爲了得到這樣的事情會工作(想象一下,這就是所謂的「逸」,而不是「數據」):

dat = lapply(files, read.table, skip=19) 

for (i in 1:length(files)) { 
    dat[[i]]$Date = rep(datetimes[i], nrow(dat[[i]]) 

} 

dat = do.call("rbind", dat) 

然後你可以使用format(dat$Date, "%m")來獲取該只包括每月每個日期的值和tapply之間有一個彙總功能(例如mean)。將會有不太經典的plyr版本,毫無疑問會很快出現。 :)

用lapply調用read.table可能不是一個好主意,所以我也會改變它,因此您可以對每個I/O和data.frames進行基本檢查。

+1

謝謝!我剛剛寫了一些隱晦的東西(使用4個tmp變量和大量的unlists)來獲得日期時間的結果!我沒有意識到R是如此聰明:) –

+0

謝謝你的例子。我擔心,我堅持使用tapply的建議,因爲我不太明白它是如何工作的。每個文件可能具有不同的長度。第二個變量是壓力,第三個是高度,數據來自發射到天空的氣球(在不同高度的流行度取決於)。最後我想創造的是一個數據框還是一個清單列表(不確定哪些是正反兩方?),其中包含1月至12月的平均壓力,高度和臭氧(V2,V3和V7) 。感謝您一直以來的幫助! –

+0

不同的長度是好的,這就是tapply的用途 – mdsumner