如何按 R 中多个表中的行计算平均值?
How to calculate means by rows from several tables in R?
我有几个带有 x、y、z 坐标和时间戳的数据集。我将各个数据文件加载到一个看起来像这样的对象中:
[[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
...
现在我想编写一个新的 table 来计算每个时间戳的每个数据文件的 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
...
有function/package可以做到这一点吗?我已经尝试了多个包,但没有找到解决方案。
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
这是一个应该有效的快速而肮脏的方法。
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)
我有几个带有 x、y、z 坐标和时间戳的数据集。我将各个数据文件加载到一个看起来像这样的对象中:
[[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
...
现在我想编写一个新的 table 来计算每个时间戳的每个数据文件的 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
...
有function/package可以做到这一点吗?我已经尝试了多个包,但没有找到解决方案。
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
这是一个应该有效的快速而肮脏的方法。
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)