我希望将某个范围(从i到属于i范围的索引)内的所有分数与最后一个基线分数进行比较,并以递归方式更新基线分数.该范围基于满足能够确认新基线所需的最小时间差的相应指数. 如果此范围内的所有分数都低于上一个基线分数,则我希望新基线成为该范围内所有分数中的最高值(即,最接近旧基线).

df <- tibble(
i = c("1", "2", "3", "4", "5", "6", "7", "8", "9"),
range_index = c("2", "4", "4", "5", "7", "7", "9", "9", "NA"),
score = c("5", "4", "4", "3", "2", "2", "3", "1", "1")) 

我希望在sApply或for循环中执行类似的操作:

df <- df %>%
mutate(
baseline = first(score),
baseline = sapply(1:n(), function(i) {
  if (all(score[i]:score[range_index[i]]) < baseline[i-1]) {return(max(score[i]:score[range_index[i]]))}
  else {return(baseline[i-1])}}))

但我认为Score[i]:Score[Range[I]]不会将所有分数与最后一个基线进行比较.如果这些分数都低于上一个基线,我如何才能创建一个为真的条件?

预期的结果是:

baseline = c("5", "4", "4", "3", "3", "3", "3", "1", "1")

说明:第一个基线为5.在i=2时,新基线设置为4,因为i=2和i=4(对应范围)之间的所有分数都小于5.新基线为4,而不是3,因为4是i=2中最高的分数,直到i=4. 在i=4时,我们获得新的基线3,因为该范围(Score[4]=3,Score[5]=2)中的所有分数都低于上一条基线,即4. 在i=5时,尽管减少了,但我们没有获得新的基线,因为范围包括i=7,并且分数[7](==3)不低于上一个基线(==3). 由于所有分数i[8:9]都低于上一次基线3,因此获得了i=8的新基线.

推荐答案

我认为最好使用for循环进行迭代.

library(tidyverse)

df <- tibble(id = rep(1:2, each = 9),
             range_index = rep(c(2,4,4,5,7,7,9,9,NA), 2),
             score = c(5,4,4,3,2,2,3,1,1,5,4,4,3,2,2,3,1,0))
df %>%
  group_by(id) %>%
  mutate(
    baseline = {
      baseline <- score
      for (i in 2:(n() - 1)) {
        baseline[i] <- min(baseline[i - 1], max(score[i]:score[range_index[i]]))
      }
      baseline[n()] <- baseline[n() - 1]
      baseline
    }
  )
#> # A tibble: 18 × 4
#> # Groups:   id [2]
#>       id range_index score baseline
#>    <int>       <dbl> <dbl>    <dbl>
#>  1     1           2     5        5
#>  2     1           4     4        4
#>  3     1           4     4        4
#>  4     1           5     3        3
#>  5     1           7     2        3
#>  6     1           7     2        3
#>  7     1           9     3        3
#>  8     1           9     1        1
#>  9     1          NA     1        1
#> 10     2           2     5        5
#> 11     2           4     4        4
#> 12     2           4     4        4
#> 13     2           5     3        3
#> 14     2           7     2        3
#> 15     2           7     2        3
#> 16     2           9     3        3
#> 17     2           9     1        1
#> 18     2          NA     0        1

R相关问答推荐

使用spatVector裁剪网格数据时出现的问题

在位置周围设定一个半径并识别该半径内的其他位置

使用R中的Shapetime裁剪格栅文件

使用R中相同值创建分组观测指标

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

手动打印线型gplot

根据元素和前一个值之间的差值过滤矩阵的元素

在数组索引上复制矩阵时出错

我正在努力用R计算数据集中的中值逐步距离

如何删除仅在数据集顶部和底部包含零的行

如何在科学记数法中显示因子

在数据帧列表上绘制GGPUP

如何删除R中除数字元素以外的所有元素

带RStatix的Wilcoxon环内检验

如何在R中创建条形图,使条形图在y轴上围绕0.5而不是0构建条形图?

填充图例什么时候会有点?

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

如何在刻面和翻转堆叠条形图中对齐geom_text()

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

使用nls()函数的非线性模型的半正态图