R 根据阈值对数据进行装箱?

R 根据阈值对数据进行装箱?,r,R,假设我有一个响应变量,它随着时间的推移而上升和下降。每次响应变量高于阈值时,我们都有一个新的“试验”。也就是说,如果我在高于某个值时添加一列threshold,即TRUE,则threshold为TRUE的连续数据块构成一个新的试验 Time <- seq(1, 10, by = 0.5) Response <- abs(sin(Time)) Threshold <- Response > 0.6 data <- data.frame(Time, Response,

假设我有一个响应变量,它随着时间的推移而上升和下降。每次响应变量高于阈值时,我们都有一个新的“试验”。也就是说,如果我在高于某个值时添加一列
threshold
,即
TRUE
,则
threshold
TRUE
的连续数据块构成一个新的试验

Time <- seq(1, 10, by = 0.5)
Response <- abs(sin(Time))
Threshold <- Response > 0.6
data <- data.frame(Time, Response, Threshold)

data$Trial使用
rle的另一种可能性

r <- with(data, rle(Threshold))
len <- with(r, lengths[values])
n <- length(len)

trial <- rep(x = LETTERS[1:n], times = len)

data$Trial[data$Threshold] <- trial

data

r+1。这比杰克的答案要快,尤其是在数据越来越大的情况下。它可以进一步优化。请看这里:@AnandaMahto,感谢您的评论和改进建议!
data$Trial <- factor(
  ifelse(data$Threshold, cumsum(!data$Threshold), NA), labels = c("A", "B", "C")
)

##   Time   Response Threshold Trial
## 1   1.0 0.84147098      TRUE     A
## 2   1.5 0.99749499      TRUE     A
## 3   2.0 0.90929743      TRUE     A
## 4   2.5 0.59847214     FALSE  <NA>
## 5   3.0 0.14112001     FALSE  <NA>
## 6   3.5 0.35078323     FALSE  <NA>
## 7   4.0 0.75680250      TRUE     B
## 8   4.5 0.97753012      TRUE     B
## 9   5.0 0.95892427      TRUE     B
## 10  5.5 0.70554033      TRUE     B
## 11  6.0 0.27941550     FALSE  <NA>
## 12  6.5 0.21511999     FALSE  <NA>
## 13  7.0 0.65698660      TRUE     C
## 14  7.5 0.93799998      TRUE     C
## 15  8.0 0.98935825      TRUE     C
## 16  8.5 0.79848711      TRUE     C
## 17  9.0 0.41211849     FALSE  <NA>
## 18  9.5 0.07515112     FALSE  <NA>
## 19 10.0 0.54402111     FALSE  <NA>
r <- with(data, rle(Threshold))
len <- with(r, lengths[values])
n <- length(len)

trial <- rep(x = LETTERS[1:n], times = len)

data$Trial[data$Threshold] <- trial

data