我想使用一列来指示每个样本的起点,然后标记起点之后的点(行),直到达到最大时间。
例如 - 我的数据 (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))
我只想要每个样本的前五秒数据。该标志表示样本的第一行(请记住,这是一个简化版本 - 我的真实数据要求我设置一个标志句柄来查找起点)。我想用起始点(标志=1)抓取行,然后d$Seconds
在起始点的 5 秒窗口内的每一行中放置一个 1 值。我不能只添加五个,因为有些样本的点在 4 秒,然后从开始 6 秒开始。我正在处理一个大型数据集,所以我也试图避免 for 循环。有任何想法吗?(对不起数据格式 - 我以前没有发布过,它不会让我放图片)