gpt4 book ai didi

r - 提取数据集中的第一个和最后一个位置

转载 作者:行者123 更新时间:2023-12-04 11:32:34 24 4
gpt4 key购买 nike

我有这个数据集,我试图转换它以获取通过测试的特定数据点分组中的“从”和“到”位置。

以下是数据的外观:

pos <- seq(from = 10, to = 100, by = 10)
test <- c(1, 1, 1, 0, 0, 0, 1, 1, 1, 0)
df <- data.frame(pos, test)

所以你可以看到位置 10、20 和 30,以及 70、80 和 90 通过了测试(b/c test = 1),但其余的点没有通过。我正在寻找的答案是一个类似于下面代码中的“答案”数据框的数据框:
peaknum <- c(1, 2)
from <- c(10, 70)
to <- c(30, 90)
answer <- data.frame(peaknum, from, to)

关于如何转换数据集的任何建议?我难住了。

谢谢,
史蒂夫

最佳答案

我们可以使用 data.table .使用 rleid基于相同“test”的相邻值创建游程组ID(“peaknum”)的函数。使用“peaknum”作为分组变量,我们得到“pos”的“min”和“max”,同时将“i”指定为“test==1”以对行进行子集化。如果需要,'peaknum' 值可以更改为序列 ('seq_len(.N)`)。

library(data.table)
setDT(df)[, peaknum:= rleid(test)][test==1,
list(from=min(pos), to=max(pos)) ,peaknum][, peaknum:= seq_len(.N)]
# peaknum from to
#1: 1 10 30
#2: 2 70 90

关于r - 提取数据集中的第一个和最后一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36070518/

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