【发布时间】:2017-07-29 23:31:58
【问题描述】:
我有一个大约 3000 行的数据框。我希望找到最长的正数和负数。
我的示例数据框:df
1 0.502310591
2 -0.247577976
3 -0.307256769 2
4 0.442253678
5 -0.795770351
6 2.08244648
7 -0.01672777
8 -0.164145656 2
9 0.610117365
10 0.014758371
11 0.381105476
12 0.721386493 4
13 -0.363222383
14 0.201409322
15 0.724867214
16 -1.586829584
17 1.066288451
18 0.182824494
19 0.237447191
20 -0.215475797
最长正数:4 最长负数:2
我正在关注本教程:https://ocw.mit.edu/ans7870/18/18.05/s14/html/r-tut-rle.html
我需要资助最长的值 >0 和
我猜这只能找到 1,0 的最长长度?如果是这种情况,那么我需要一个辅助列 ifelse 1,0 来拆分负数、正数……然后也许可以用这段代码找到最长的长度:
> df$wins <- ifelse(df$V2 > 0, 1, 0)
> df$loss <- ifelse(df$V2 < 0, 1, 0)
> win <- (c(df$wins))
> max(rle(win)$lengths)
[1] 4
这适用于找到最大的胜利......
这是为了损失:
> print(df$loss)
[1] 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1
> df$loss <- ifelse(df$V2 < 0, 1, 0)
> print(df$loss)
[1] 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1
> loss <- (c(df$loss))
> max(rle(loss)$lengths)
[1] 4
不知道为什么它说 4... 显然有 2 最大损失,有人知道为什么吗? 我错过了什么,胜利的逻辑不应该与失败的逻辑完全相同吗?我在代码中看不到任何错误...
如果 df$loss 中的值小于 0,则打印 1,否则为 0。
制作一个包含 df$loss 列内容的向量
使用 max(rle(loss)$lengths) 查找 1 的最大长度
再次结果是 4.. 然而,它显然是 2?
【问题讨论】:
-
到目前为止你尝试了什么?
-
y 0] 只需要返回最长长度 > 0
-
如果我理解正确,
rle(sign(x))应该会为你做的
标签: r