首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的Excel偏移函数

R中的Excel偏移函数
EN

Stack Overflow用户
提问于 2013-02-28 20:53:00
回答 2查看 2K关注 0票数 2

我正在尝试从Excel中模拟偏移函数。我知道可以对单个值执行此操作,但我希望返回一个范围。我想返回一组偏移量为1、组大小为2的值。例如,在第4行,我想返回一个包含a列、第3行和第2行的值的组。对不起,我被难住了。

是否可以使用cbind或类似方法将此结果作为另一列添加到数据框中?或者,我可以在矢量化函数中使用它,这样我就可以对结果求和或求平均值吗?

样机示例:

代码语言:javascript
运行
复制
> 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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 09:52:41

这应该能起到作用:

代码语言:javascript
运行
复制
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所称的偏移有时也称为滞后。

编辑:下面是Greg Snow的评论,这是一个更优雅,但也更难理解的版本:

代码语言:javascript
运行
复制
df <- cbind(df, as.data.frame((embed(c(NA, NA, df$a), 3))[,c(3,2)]))

逐个组件地尝试它,看看它是如何工作的。

票数 3
EN

Stack Overflow用户

发布于 2013-03-01 06:02:10

你想要这样的东西吗?

代码语言:javascript
运行
复制
> df <- data.frame(a=1:10)
> b=t(sapply(1:10, function(i) c(df$a[(i+2)%%10+1], df$a[(i+4)%%10+1])))
> s = sapply(1:10, function(i) sum(b[i,]))
> df = data.frame(df, b, s)
> df
    a X1 X2  s
1   1  4  6 10
2   2  5  7 12
3   3  6  8 14
4   4  7  9 16
5   5  8 10 18
6   6  9  1 10
7   7 10  2 12
8   8  1  3  4
9   9  2  4  6
10 10  3  5  8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15136062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档