最后一个观察值由R中的id结转

368yc8dk  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(97)

我有一些这样的纵向数据:

id <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9)
var1 <- c(0,1,1,1,NA,2,2,NA,NA,NA,1,1,0,1,1,2,1,2,NA,1,1,2,2,NA,NA,2,NA)
var2 <- c(1,NA,NA,2,1,NA,1,1,NA,0,0,1,NA,0,1,1,0,0,0,NA,1,1,1,2,0,NA,2)
visit <- rep(1:3, 9)
dt <- as.data.frame(cbind(id, var1, var2, visit))

每个不同的id代表一个患者。visit是测量周期(即,每个患者应测量三次)。我想对患者idvar1var2进行末次观察结果结转。我在另一篇文章中找到了一些代码。它使用了zoogsubfn包中的函数。它对一个变量运行良好(见下文)

dt1 <- transform(dt, var1=fn$ave(var1, id, FUN= ~ na.locf(x, na.rm = FALSE)))

我想知道如何使用多列?谢谢你。

e4yzc0pl

e4yzc0pl1#

使用dplyr你可以

library(dplyr)
dt %>% 
  group_by(id) %>%
  mutate(across(var1:var2, ~zoo::na.locf(.x, na.rm=FALSE)))

相关问题