如何归一化为R中序列的前一个值

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

我正在努力解决的一个概念上很简单的问题。我将观察值(“值”)随时间按ID分组,并希望将每个观察值归一化为其先前的观察值。在下面的示例中,我可以将每个“值”归一化为ID组中的第一个“时间”观察值(即10到10、20到10、30到10等),但是我想将每个“值”归一化为之前的观察值(例如20到10、30到20等),并且无法使其正常工作。

ID <- c(rep("A", 4), rep("B", 3), rep("C", 3))
Time <- c(10, 20, 30, 40, 10, 20, 30, 10, 20, 30)
Value <- sample(1:100, 10)
dat <- cbind(ID, Time, Value)

newDat <- dat %>%
  arrange(Time) %>%
  group_by(ID) %>%
  mutate(ratio = Value/first(Value))
r dplyr normalization tidyverse plyr
1个回答
0
投票

使用lag

library(dplyr)

dat %>%
  group_by(ID) %>%
  mutate(ratio = Value/lag(Value))

数据

ID <- c(rep("A", 4), rep("B", 3), rep("C", 3))
Time <- c(10, 20, 30, 40, 10, 20, 30, 10, 20, 30)
Value <- sample(1:100, 10)
dat <- data.frame(ID, Time, Value)
© www.soinside.com 2019 - 2024. All rights reserved.