0
我希望主题行很清晰...我有一个矩阵列表。在每个矩阵中,我想要一个包含行的最大值的列名向量。实际上这些向量的列表。简单的例子:如何从列表中的每个矩阵中获取矩阵中每行的最大值的列名?
a = c(1,1,3)
b = c(7,2,1)
c = c(2,4,2)
d1 = cbind(a,b,c)
d = c(2,1,6)
e = c(1,4,2)
f = c(4,8,4)
d2 = cbind(d,e,f)
l = list(d1,d2)
l
[[1]]
a b c
[1,] 1 7 2
[2,] 1 2 4
[3,] 3 1 2
[[2]]
a b c
[1,] 2 1 4
[2,] 1 4 8
[3,] 6 2 4
我接近。这让我的最高值的指标:
lapply(l,function(y) apply(y, 1, function(x) which (x==max(x))))
[[1]]
[1] 2 3 1
[[2]]
[1] 3 3 1
但是,这是所有我能鼓起得到的列名:
lapply(l,function(y) apply(y, 1, function(y) colnames(y)[function(x) which (x==max(x))]))
[[1]]
NULL
[[2]]
NULL
我追求的是:
[[1]]
[1] 'b', 'c', 'a'
[[2]]
[1] 'c', 'c', 'a'
在更简单的表达式中,colnames(matrixFrameName)[expression returning indexes]
按我的预期工作;不是在这种情况下。有人可以帮忙吗? THX ...
你举的例子是矩阵的一个列表,而不是data.frames列表... – mnel
THX,编辑;这是一个简化的可重复性..我的应用程序需要数据帧和时间序列 – StatsViaCsh
对数据帧的逐行计算速度慢并且效率低下。 ('apply'强制data.frames到矩阵,'data.frames'按列存储 – mnel