【发布时间】:2020-05-25 13:57:01
【问题描述】:
我有一个大型数据框,我需要一个函数来自动执行此搜索。 基本上我想找出第一次观察和前两次连续的负面观察之间有多少观察。
例子:
x <- c(2, 1, 9, 3, 4, -6, 5, 6, -7, -1)
假设这是我的数据,我想计算 2 到 -7 之间的数据点数。
我需要在 r 中执行此操作。
非常感谢您的帮助 :D !!!
【问题讨论】:
我有一个大型数据框,我需要一个函数来自动执行此搜索。 基本上我想找出第一次观察和前两次连续的负面观察之间有多少观察。
例子:
x <- c(2, 1, 9, 3, 4, -6, 5, 6, -7, -1)
假设这是我的数据,我想计算 2 到 -7 之间的数据点数。
我需要在 r 中执行此操作。
非常感谢您的帮助 :D !!!
【问题讨论】:
你可以这样做:
which.max(cumsum(x < 0) == 2)
[1] 9
【讨论】:
which(cumsum(x < 0) == 2) - 1 如果不包括2
x <- c(2, -1, 9, -3, 4, -6, 5, 6, -7, -1)
您可以使用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
【讨论】:
max,它应该可以解决开头有两个负数的情况。