gpt4 book ai didi

r - 在连续行中查找值

转载 作者:行者123 更新时间:2023-12-01 10:19:48 28 4
gpt4 key购买 nike

下面给出了我的数据框示例。

ID     X      
1 1
2 2
3 1
4 0
5 0
6 1
7 4
8 5
9 6
10 7
11 0
12 0

我想对其应用逻辑,以查看是否有 3 个或更多连续行的值 >0。如果他们这样做,我想在另一列中标记它们。因此输出将如下所示。

ID     X      Y
1 1 1
2 2 1
3 1 1
4 0 0
5 0 0
6 1 1
7 4 1
8 5 1
9 6 1
10 7 1
11 0 0
12 0 0

扩展 -我如何获得以下输出,为每个组提供不同的 Y 值?

ID     X      Y
1 1 1
2 2 1
3 1 1
4 0 0
5 0 0
6 1 2
7 4 2
8 5 2
9 6 2
10 7 2
11 0 0
12 0 0

最佳答案

base R 的一个选项。使用 rle 找到 'X' 中大于 0 的相邻值,然后根据 lengths

进行 replication >
df1$Y <- with(rle(df1$X > 0), as.integer(rep(values & lengths > 2, lengths)))
df1$Y
#[1] 1 1 1 0 0 1 1 1 1 1 0 0

对于 OP 帖子中的更新案例

df1$Y <- inverse.rle(within.list(rle(df1$X > 0), {
i1 <- values & (lengths > 2)
values[i1] <- seq_along(values[i1])}))
df1$Y
#[1] 1 1 1 0 0 2 2 2 2 2 0 0

或者使用 data.table 中的 rleid

library(data.table)
setDT(df1)[, Y := as.integer((.N > 2) * (X > 0)),rleid(X > 0)]

数据

df1 <- structure(list(ID = 1:12, X = c(1L, 2L, 1L, 0L, 0L, 1L, 4L, 5L, 
6L, 7L, 0L, 0L)), class = "data.frame", row.names = c(NA, -12L
))

关于r - 在连续行中查找值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182880/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com