我有4个数据帧的列表,每个数据帧有3列10行。第一列是维度,后两列是值。我的目标是循环遍历每个数据帧的列表和行,并为每个数据帧中的每个记录取2个值列的差异。因此,所需的输出将是包含2列的4个数据帧的列表,维度列和方差列。
下面是一个示例,其中x是维度,y1和y2是度量(我的实际列表有5个数据帧,每个数据帧有15个值,每个约9000行)。这只是为了简化它。
提前感谢任何提示。
[[1]]
x y1 y2
1 1 3 3
2 2 4 4
3 3 5 5
4 4 6 6
5 5 7 7
6 6 8 8
7 7 9 9
8 8 10 10
9 9 11 11
10 10 12 12
[[2]]
x y2 y2.1
1 1 2 3
2 2 3 4
3 3 4 5
4 4 5 6
5 5 6 7
6 6 7 8
7 7 8 9
8 8 9 10
9 9 10 11
10 10 11 12
[[3]]
x y3 y2
1 1 4 3
2 2 5 4
3 3 6 5
4 4 7 6
5 5 8 7
6 6 9 8
7 7 10 9
8 8 11 10
9 9 12 11
10 10 13 12
[[4]]
x y4 y2
1 1 5 3
2 2 6 4
3 3 7 5
4 4 8 6
5 5 9 7
6 6 10 8
7 7 11 9
8 8 12 10
9 9 13 11
10 10 14 12
答案 0 :(得分:3)
这是一种方法:
lapply(x,function(DF) cbind(
dim = DF[,1],
var = apply(DF[,2:3],1,var)
))
@ DavidArenburg的改进:为了提高效率,请将apply
来电替换为
var = RowVar(x[,2:3])
其中
RowVar <- function(x) {
rowSums((x - rowMeans(x))^2)/
(dim(x)[2] - 1)
}
Noam Ross makes the argument用于RowVar
上的矢量化(如*apply
)。
除了。如果你有一个矩阵列表而不是data.frames,这可能会更快。由于它们都具有相同的尺寸,您甚至可以考虑将它们放在三维数组中。