我有一个由116列和4700行组成的大矩阵。
对于每一行,我想计算以下形式的标准化差异:
(((a2-a1)/a1)*100)+100, where a1 is the previous value and a2 is the next value.
在R中我使用以下代码:
for i in (1:116)
a[i]=(((a[i]-a[i-1])/a[i-1])*100)+100
但是我收到以下错误:
Error in Ops.data.frame(a[i], a[i - 1]) :
- only defined for equally-sized data frames
我猜测问题是它没有考虑第一个值,其中没有第一个值-1来减去。
我该如何解决这个问题?
以下是数据的子集:https://dl.dropbox.com/u/22681355/su.csv
请记住,我想单独计算每一列!
答案 0 :(得分:1)
您的问题可以使用reproducible example来使其更清晰。例如,您说您有一个矩阵,但随后显示与数据帧相关的错误。如果不知道您的数据是什么样的,我们就无法知道答案是否正确。
但无论如何,我认为你可以在没有循环的情况下做到这一点。
# Example data:
foo <- data.frame(A = 1:10, B = rnorm(10))
# Compute standardized differences:
(foo[-1,] - foo[-nrow(foo),]) / foo[-nrow(foo),] * 100 + 100