英文:
Last observation carried forward by id in R
问题
我有一些类似这样的纵向数据:
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
是测量周期(即,每个患者应该被测量三次)。
我想要对 var1
和 var2
按照 id
进行最后观察值前移的操作。我在其他帖子中找到了一些代码。它使用了 zoo
包和 gsubfn
包中的函数。它对一个变量运行得很好(见下面的代码):
dt1 <- transform(dt, var1=fn$ave(var1, id, FUN= ~ na.locf(x, na.rm = FALSE)))
我想知道如何在多个列上执行相同的操作?谢谢。
Note: 由于您要求不要翻译代码部分,我只返回非代码部分的翻译。上述内容已经翻译完毕。
英文:
I have some longitudinal data like this:
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))
Each distinct id
represents a patient. visit
is the measuring cycle (i.e., each patient should be measured three times).
I would like to conduct the last observation carried forward on var1
and var2
by patient id
. I found some codes in other post. It used function from package zoo
and package gsubfn
. It worked well for one variable (see below)
dt1 <- transform(dt, var1=fn$ave(var1, id, FUN= ~ na.locf(x, na.rm = FALSE)))
I'm wondering how to do it with multiple columns? Thank you.
答案1
得分: 3
使用dplyr可以执行
library(dplyr)
dt %>%
group_by(id) %>%
mutate(across(var1:var2, ~zoo::na.locf(.x, na.rm=FALSE)))
英文:
Using dplyr you can do
library(dplyr)
dt %>%
group_by(id) %>%
mutate(across(var1:var2, ~zoo::na.locf(.x, na.rm=FALSE)))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论