首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dplyr对带有约束的数据进行汇总

使用Dplyr对带有约束的数据进行汇总
EN

Stack Overflow用户
提问于 2018-04-10 19:19:43
回答 1查看 72关注 0票数 1

我有一个与下面的数据类似的数据:

代码语言:javascript
复制
data <- data.frame(x = c("0", "2", "8", "1", "7", "10", "15", "14", "13", "11"),
                   y = c("11", "5", "14", "9", "13", "7", "4", "0", "12", "8"),
                   act_x = c("Short", "Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy"),
                   act_y = c("Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy", "Short"))

我希望根据对x和y所采取的操作,为x创建一个利润列,并为y创建一个利润列。

代码语言:javascript
复制
res <- data.frame(data,
                  prof_x = c(NA, -2, 6, 7, 6, -3, 5, 1, -1, 2),
                  prof_y = c(NA, -6, -9, -5, -4, -6, 3, -4, -12, -4))

例如,从第0天开始(第一行),我做空x并买入y,相应的价格在第1天(第2行)移动并稳定下来。X的利润是0-2=-2 (因为我做空了x),y的利润是5-11=-6 (因为我买了y)。等等..。

是否有一种在Dplyr管道中实现此功能的友好方法?有人在管道之外有什么建议吗?提前感谢您的指导。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-10 19:34:46

使用lagmutate的基于lag的解决方案可以实现如下:

代码语言:javascript
复制
library(dplyr)
data %>% mutate(x = as.numeric(x), y = as.numeric(y)) %>%
  mutate(prof_x = ifelse(act_x == "Buy", lag(x)-x, x-lag(x))) %>%
  mutate(prof_y = ifelse(act_y == "Buy", lag(y)-y, y-lag(y)))
# 
# x  y act_x act_y prof_x prof_y
# 1   0 11 Short   Buy     NA     NA
# 2   2  5   Buy Short     -2     -6
# 3   8 14 Short   Buy      6     -9
# 4   1  9   Buy Short      7     -5
# 5   7 13 Short   Buy      6     -4
# 6  10  7   Buy Short     -3     -6
# 7  15  4 Short   Buy      5      3
# 8  14  0   Buy Short      1     -4
# 9  13 12 Short   Buy     -1    -12
# 10 11  8   Buy Short      2     -4

数据:

代码语言:javascript
复制
data <- data.frame(x = c("0", "2", "8", "1", "7", "10", "15", "14", "13", "11"),
        y = c("11", "5", "14", "9", "13", "7", "4", "0", "12", "8"),
        act_x = c("Short", "Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy"),
        act_y = c("Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy", "Short", "Buy", "Short"),
        stringsAsFactors = FALSE)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49761384

复制
相关文章

相似问题

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