我需要找到矩阵中各列之间的差异。 https://mystat115.blogspot.com/feeds/posts/default?alt=rss
函数将使用矩阵来处理每一列的行之间的差异,但是我需要每一行的列之间的差异。我尝试在行索引上将diff()
与apply()
一起使用,但这会返回转置结果。为什么它返回移调,而我使用不正确?
diff()
答案 0 :(得分:1)
详细说明apply
的“移调效果”:
根据?apply
,apply
将函数应用于数组(例如{{1})的行向量(MARGIN = 1
)或列向量(MARGIN = 2
) })并返回
如果数组为“ n> 1”,则数组为维度“ c(n,dim(X)[MARGIN])”
其中n是函数的单独调用返回到行向量或列向量的向量的长度。
因此,在您的情况下,matrix
是dim(m)
(即2 10
矩阵)和2x10
,因此返回对象的数组维是MARGIN = 1
,这意味着9 2
矩阵(因为9x2
返回长度为diff
的向量)。
这样做时,您可以看到相同的“移调效果”
n=9
答案 1 :(得分:0)
如果让您感到困惑的是格式9 2
而不是2 9
,那么您是对的,只需转置它即可。
因为您已经很好地计算了列之间的差异,即
for(k in 1:nrow(m)) diff(m[k,])
完全可以满足您已有的需求。一个简单的t(apply(m, 1, diff))
就可以解决问题。
> t(apply(m, 1, diff))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 2 2 2 2 2 2 2 2 2
[2,] 2 2 2 2 2 2 2 2 2
PS 您无法获得10 2
/ 2 10
结构,因为diff
显然将返回大小为n - 1
的元素。>