【问题标题】:Consecutive wins/losses R连续输赢 R
【发布时间】:2020-09-21 18:49:44
【问题描述】:

我对 R 和进行分析的学习方法仍然很陌生。我有一个 df,我想根据“x9”列计算连续的赢/输。这显示了输入交易的收益/损失(正值或负值)。我确实找到了一些有助于分配符号、符号滞后和更改的代码的帮助,但是,我正在寻找计数器来计算连续胜利,直到实现失败然后重置,然后计算连续失败直到实现胜利.总体而言,我正在寻求帮助来调整计数器以在连续赢/输中断时重置。我在下面有一些示例代码和附加的 .png 来解释我的想法

#Read in df 
df=vroom::vroom(file = "analysis.csv")

#Filter df for specfic order types
df1 = filter(df, (x3=="s/l") |(x3=="t/p"))

#Create additional column to tag wins/losses in df1 
index <- c("s/l","t/p")
values <- c("Loss", "Win")
df1$col2 <- values[match(df1$x3, index)]
df1

#Mutate df to review changes, attempt to review consecutive wins and losses & reset when a 
#positive / negative value is encountered
df2=df1 %>%
  mutate(sign = ifelse(x9 > 0, "pos", ifelse(x9 < 0, "neg", "zero")), # get the sign of the value
         sign_lag = lag(sign, default = sign[9]),                     # get previous value (exception in the first place)
         change = ifelse(sign == sign_lag, 1 , 0),                    # check if there's a change
         series_id = cumsum(change)+1) %>%                            # create the series id
  print() -> dt2 

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557(和xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,dput(head(x))data.frame(...))。
  • 拥有df2 = df1 %&gt;% ... %&gt;% print() -&gt; dt2 似乎很奇怪。它们应该是等价的 (identical(df2, dt2)),所以这里没有损失,但只是......奇怪。
  • 你说得对,我只是在实验室里尝试不同的方法。它们确实是一样的。感谢您对此的快速回复和帮助。

标签: r


【解决方案1】:

我认为您可以为此使用rle。它本身并不会立即提供类似分组的功能,但我们可以使用 data.table::rleid 或构建我们自己的函数:

# borrowed from https://stackoverflow.com/a/62007567/3358272
myrleid <- function(x) {
  rl <- rle(x)$lengths
  rep(seq_along(rl), times = rl)
}

x9 <- c(-40.57,-40.57,-40.08,-40.08,-40.09,-40.08,-40.09,-40.09,-39.6,-39.6,-49.6,-39.6,-39.61,-39.12,-39.12-39.13,782.58,-41.04)
tibble(x9) %>%
  mutate(grp = myrleid(x9 > 0)) %>%
  group_by(grp) %>%
  mutate(row = row_number()) %>%
  ungroup()
# # A tibble: 17 x 3
#       x9   grp   row
#    <dbl> <int> <int>
#  1 -40.6     1     1
#  2 -40.6     1     2
#  3 -40.1     1     3
#  4 -40.1     1     4
#  5 -40.1     1     5
#  6 -40.1     1     6
#  7 -40.1     1     7
#  8 -40.1     1     8
#  9 -39.6     1     9
# 10 -39.6     1    10
# 11 -49.6     1    11
# 12 -39.6     1    12
# 13 -39.6     1    13
# 14 -39.1     1    14
# 15 -78.2     1    15
# 16 783.      2     1
# 17 -41.0     3     1

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-03-04
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多