我正在尝试从 Excel 模拟 OFFSET 函数。我知道这可以针对单个值完成,但我想返回一个范围。我想返回一组偏移量为 1、组大小为 2 的值。例如,在第 4 行,我想要一组包含 a 列、第 3 行和第 2 行的值。抱歉,我我被难住了。
是否可以使用 cbind 或类似工具将此结果作为另一列添加到数据框中?或者,我可以在向量化函数中使用它,以便我可以对结果求和或求平均值吗?
模型示例:
> df <- data.frame(a=1:10)
> df
a
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
> #PROCESS
> df
a b
1 1 NA
2 2 (1)
3 3 (1,2)
4 4 (2,3)
5 5 (3,4)
6 6 (4,5)
7 7 (5,6)
8 8 (6,7)
9 9 (7,8)
10 10 (8,9)
最佳答案
这应该可以解决问题:
df$b1 <- c(rep(NA, 1), head(df$a, -1))
df$b2 <- c(rep(NA, 2), head(df$a, -2))
请注意,结果必须位于两列中,因为数据框中的列仅支持简单数据类型。 (除非您想求助于复数。)head
如果参数为负,则从尾部删除参数的负值,尝试 head(1:10, -2)
。 rep
是重复,c
是串联。 <-
分配会添加一个新列(如果尚不存在)。
Excel 中所谓的 OFFSET 有时也称为滞后。
编辑:根据 Greg Snow 的评论,这里有一个更优雅的版本,但也更难以理解:
df <- cbind(df, as.data.frame((embed(c(NA, NA, df$a), 3))[,c(3,2)]))
逐个组件地尝试它,看看它是如何工作的。
关于r - Excel中R中的OFFSET函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136062/