2012-05-11 35 views
0

在典型的电子表格中,我可以创建一个引用任何行上的单元格的公式。跨越数据框中多行的计算

所以,让我们说我有以下数据:

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我错过了某个地方。

回答

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)]) 
+0

那么'[-1]'是什么表示如果不是-1记录?如果我想用两行乘以,我会做'-23(d)',向前是'+ nrow(d)'?我抬头看了一下'nrow',它没有提到这件事?你怎么会知道这事? – thequerist

+2

负指数给出了除指定的所有其他元素。我知道这是因为我阅读了“R介绍”第2.7节以及“?”(或?Extract)的帮助。 – mdsumner