【问题标题】:How to find number of observation between first observation and first two consecutive negative observations in r如何在r中找到第一次观察和前两个连续负面观察之间的观察次数
【发布时间】:2020-05-25 13:57:01
【问题描述】:

我有一个大型数据框,我需要一个函数来自动执行此搜索。 基本上我想找出第一次观察和前两次连续的负面观察之间有多少观察。

例子:

x <- c(2, 1, 9, 3, 4, -6, 5, 6, -7, -1)

假设这是我的数据,我想计算 2 到 -7 之间的数据点数。

我需要在 r 中执行此操作。

非常感谢您的帮助 :D !!!

【问题讨论】:

    标签: r count


    【解决方案1】:

    你可以这样做:

    which.max(cumsum(x < 0) == 2)
    
    [1] 9
    

    【讨论】:

    • which(cumsum(x &lt; 0) == 2) - 1 如果不包括2
    • 返回整数(0)
    • 这是否考虑到连续部分?试一试,例如x &lt;- c(2, -1, 9, -3, 4, -6, 5, 6, -7, -1)
    【解决方案2】:

    您可以使用rle 来查找前两个连续的负面观察结果,例如:

    i <- rle(!(is.na(x) | x>=0))
    j <- i$lengths > 1 & i$values
    j <- if(any(j)) min(which(j))-1 else 0
    if(j > 0) sum(i$lengths[seq_len(j)])-1 else 0
    #[1] 7
    

    【讨论】:

    • 感谢您的回答。这就是它在 seq_len(min(which(i$lengths > 1 & i$values)) - 1) 中返回的错误:参数必须强制转换为非负整数此外:警告消息:在 min(which(i$ lengths > 1 & i$values)) : min 没有非缺失参数;返回 Inf
    • 我添加了一个max,它应该可以解决开头有两个负数的情况。
    • 现在它在 seq_len(max(0, min(which(i$lengths > 1 & i$values)) - 1)) 中返回错误:参数必须强制转换为非负整数此外: 警告信息: In min(which(i$lengths > 1 & i$values)) : no non-missing arguments to min;返回 Inf
    • 您能否更新您的示例数据以满足您将使用它的条件?
    • 当然,这里是数据 c(0, 0, 0, 0, 0, 0, 0, 1, 28, 131, 74,164, -207,135, 143, 109, 349, -232. -671)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多