0

我有一个由 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

请记住,我想单独计算每一列!

4

1 回答 1

1

您的问题可以使用可重现的示例来使其更清楚。例如,您说您有一个矩阵,但随后显示与数据框相关的错误。在不知道您的数据是什么样子的情况下,我们无法知道答案是否正确。

但无论如何,我认为你可以在没有循环的情况下做到这一点,如下所示。

# Example data:
foo <- data.frame(A = 1:10, B = rnorm(10))

# Compute standardized differences:
(foo[-1,] - foo[-nrow(foo),]) / foo[-nrow(foo),] * 100 + 100
于 2012-11-15T14:14:22.087 回答