根据 R 中的基线 24 小时值计算比率

问题描述 投票:0回答:1

我正在使用纵向数据集,其中我记录了 72 小时的实验。前 24 小时是基线记录,24 小时后我开始实验条件。简化的数据框看起来像这样:

df <- data.frame(
  accumulated_hours = rep(0:71, each = 1),
  ID = rep(c('A', 'B'), each = 72),
  o2 = runif(144, 5, 15)  # Random o2 values for example
) 

我想通过将每小时的值除以相应的基准小时来计算 o2 的比率。因此,24 小时和 48 小时的 o2 值除以 0、25 和 49 小时的 o2 再除以 1 小时的 o2 值等。我怎样才能最好地解决这个问题?

我尝试通过 case_when 来解决它,但我无法让它工作,而且如果我必须重写 20 个变量,它似乎不是最有效的形式。

  df %>%
group_by(ID) %>%
mutate(
  ratio = case_when(
    accumulated_hours >= 24 & accumulated_hours < 48 ~ (o2 / o2[accumulated_hours - 24]),
    accumulated_hours >= 48 & accumulated_hours < 72 ~ (o2 / o2[accumulated_hours - 48]),
    TRUE ~ NA_real_
  )
)

我也有时间戳,从中我可以得出累计小时数(mdy_hms),如果使用起来更方便的话。

非常感谢您的任何建议!

r conditional-formatting baseline
1个回答
0
投票

您可以制作一个 24 行的

matrix
,将第 1 列乘以其余列并分配
as.vector

m <- matrix(df$o2, nrow=24)
m[, -1] <- m[, -1]*m[, 1]
df$o2_adj <- m |> as.vector()
© www.soinside.com 2019 - 2024. All rights reserved.