跨越数据框中多行的计算

时间:2012-05-11 01:11:40

标签: r time-series

在典型的电子表格中,我能够创建一个引用任何行上的单元格的公式。

那么让我们说我有以下数据:

a=1:10
b=11:20
c=data.frame(a,b)

哪会产生这个:

    a  b
1   1 11
2   2 12
3   3 13
4   4 14
5   5 15
6   6 16
7   7 17
8   8 18
9   9 19
10 10 20

因此,在电子表格中,我可以将单元格c2放在绝对公式c$b2*c$a1中,并获取数字12。或者甚至可能使用相对引用来更复杂的ifelse(c$a>5,c$b*c$a[-1]*2,c$b*c$a[-1]

    a  b   c
1   1 11  NA
2   2 12  12
3   3 13  26
4   4 14  42
5   5 15  60
6   6 16  80
7   7 17 204
8   8 18 252
9   9 19 304
10 10 20 360

我知道R不是电子表格,但有一个包或函数可以让我以这种方式处理数据帧,或者这种功能是否存在根本错误?对于需要跨越多个记录或行的函数,我一直存在这些问题。几乎所有与我合作的东西都是时间序列,如果它有帮助的话。是否有文件可以解释这些功能?也许有?topic我错过了某个地方。

1 个答案:

答案 0 :(得分:2)

你很接近,你需要通过排除第一个和最后一个值来完成偏移,然后将所有这些包装在ifelse中:

a = 1:10
b = 11:20
d = data.frame(a,b)
d$c = ifelse(d$a > 5, c(NA, d$b[-1] * d$a[-nrow(d)]) * 2, c(NA, d$b[-1] * d$a[-nrow(d)]))

(我选择d作为变量名,因为c是一个非常常用的函数。)

要获得更整洁的答案,请将主要计算保留在ifelse之外,并仅将其用于乘数:

 d$c = ifelse(d$a > 5, 2, 1) * c(NA, d$b[-1] * d$a[-nrow(d)])