在典型的电子表格中,我能够创建一个引用任何行上的单元格的公式。
那么让我们说我有以下数据:
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
我错过了某个地方。
答案 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)])