R 索引一行,然后在指定的时间范围内从其他列中查找该行后面的所有值

R 索引一行,然后在指定的时间范围内从其他列中查找该行后面的所有值,r,R,我想使用一列指示每个样本的起点,然后标记起点之后的点(行),直到达到最大时间 例如,我的数据(d)如下所示: > head(d) Sample Seconds Value FLAG 1 A 356 1 1 2 A 357 1 NA 3 A 358 9 NA 4 A 359 4 NA 5 A 400 1 NA 6 A 4

我想使用一列指示每个样本的起点,然后标记起点之后的点(行),直到达到最大时间

例如,我的数据(d)如下所示:

> head(d)
  Sample Seconds Value FLAG
1      A     356     1    1
2      A     357     1   NA
3      A     358     9   NA
4      A     359     4   NA
5      A     400     1   NA
6      A     401     3   NA
可复制副本如下:

d <- structure(list(Sample = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
), .Label = c("A", "B", "C"), class = "factor"), Seconds = c(356L, 
357L, 358L, 359L, 400L, 401L, 402L, 403L, 2955L, 2957L, 2959L, 
3001L, 3002L, 3004L, 2548L, 2549L, 2552L, 2553L, 2554L, 2555L, 
2556L, 2557L, 2558L), Value = c(1L, 1L, 9L, 4L, 1L, 3L, 7L, 2L, 
25L, 17L, 23L, 47L, 34L, 15L, 30L, 16L, 17L, 12L, 6L, 8L, 6L, 
6L, 5L), FLAG = c(1L, NA, NA, NA, NA, NA, NA, NA, 1L, NA, NA, 
NA, NA, NA, 1L, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("Sample", 
"Seconds", "Value", "FLAG"), class = "data.frame", row.names = c(NA, 
-23L))

d在base R中有一种方法使用
by

d$within5 <- unlist(
                by(
                    d,
                    d$Sample,
                    function (x) x$Seconds <= (x$Seconds[!is.na(x$FLAG)]+5)
                  )
                   )

在base R中,有一种方法使用
by

d$within5 <- unlist(
                by(
                    d,
                    d$Sample,
                    function (x) x$Seconds <= (x$Seconds[!is.na(x$FLAG)]+5)
                  )
                   )
仅供参考,请参阅如何使您的示例重现的问题,正如我为您所做的。一般来说,当您在屏幕上打印数据时,数据的外观对于希望提供帮助的人来说几乎是无用的。更无用的是实际的图像或屏幕截图。仅供参考,请参阅如何使您的示例重现的问题,正如我为您所做的。一般来说,当您在屏幕上打印数据时,数据的外观对于希望提供帮助的人来说几乎是无用的。更无用的是一张真实的图像或截图。