r语言 - 使用分组从其他长格式访问值中减去V1和V0



我有一个长格式的纵向数据集,我想创建两个变量,一个访问=1值从所有其他值中减去给定ID,一个访问=0值从所有其他值中减去给定ID。样本数据集:

df<-data.frame(value=rnorm(30), 
visit=rep(seq(0:9), 3), i
d=c(rep("A", 10), rep("B", 10), rep("C", 10)))

我知道一个方法是使用下面的代码:

df %>% group_by(id) %>% 
arrange(visit, .by_group=TRUE) %>%
mutate(value_chg_v1=value-nth(value, n=2),
value_chg_v0=value-nth(value, n=1))

,但我想构造的代码,如果一整行是缺失的visit=0, value_chg_v0=NA。是否有一种方法可以做到这一点,不涉及添加在行访问=0是缺失的?提前谢谢。

我们可以使用complete来创建缺失的组合

library(dplyr)
library(tidyr)
df %>% 
complete(id, visit = 0:9) %>% 
group_by(id) %>%
arrange(visit, .by_group=TRUE) %>%
mutate(value_chg_v1=value-nth(value, n=2),
value_chg_v0=value-nth(value, n=1)) %>%
ungroup %>%
drop_na(value)