2015-03-30 69 views
0

我有幾個具有x,y,z座標和時間戳的數據集。我裝了單個數據文件合併爲一個對象,它看起來是這樣的:如何從R中的多個表中按行計算平均值?

[[1]] 
    x;y;z;time 
    -3.144;0.8554;-1.806;0.0724 
    -3.144;0.8554;-1.806;0.0968 
    -3.144;0.8554;-1.806;0.6275 
    -3.144;0.8554;-1.806;0.6484 
    -3.144;0.8554;-1.806;0.6611 
    ... 
    [[2]] 
    x;y;z;time 
    -2.840;0.9775;-2.058;0.0724 
    -2.832;0.9775;-2.058;0.0968 
    -2.845;0.9775;-2.062;0.6275 
    -2.833;0.9775;-2.067;0.6484 
    -2.847;0.9775;-2.070;0.6611 
    ... 

現在我想寫計算平均值爲X,Y,每個數據文件的z各自時間的新表郵票。所以它看起來像這樣:

x.mean;y.mean.;z.mean;time 
-2.992;0.916;-1.932;0.0724 
-2.988;0.855;-1.806;0.0968 
... 

有沒有可以做到這一點的函數/包?我嘗試了多個包,但沒有找到解決方案。

回答

1

data.table可能在這裏有效。我假設你的對象是一個data.frame表的列表,它被稱爲yourlistobject

library(data.table) 

#Convert data to data.table and then stack all data onto of one another 
big.list <- lapply(yourlistobject,setDT) 
big.data <- rbindlist(big.list,fill=TRUE) 

#Calculate means by timestamp 
out <- big.data[, lapply(.SD,mean,na.rm=T), by=.(time)] 
out 
+0

這是行得通的。非常感謝Mike – makinate 2015-03-30 22:22:28

+1

'rbindlist()'也適用於list-of-list和data.frames。所以第一步並不是IIUC所必需的。 – Arun 2015-03-31 08:43:38

0

下面是一個應該工作的快速和骯髒的方法。

iris1 = iris 
iris2 = iris 

iris1$Name = 'file1' 
iris2$Name = 'file2' 
iristotal = rbind(iris1,iris2) 

data <- subset(iristotal, select= -c(Species, Name)) 
names <- subset(iristotal, select= c(Name)) 
aggregate(data,names, mean)