我要转换此数据集,以获取通过测试的特定数据点组中的“从”和“到”位置。
数据的外观如下:
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测试= 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