gpt4 book ai didi

r - 从长格式数据框中提取基线值

转载 作者:行者123 更新时间:2023-12-02 04:25:11 28 4
gpt4 key购买 nike

我有一个以下数据框,代表纵向数据:

 df<-structure(list(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), AGE = c(59, 
59, 59, 59, 59, 69, 69, 69, 69, 69), BMI = c(23.8, 23.8, 23.8,
23.8, 23.8, 29.8, 29.8, 29.8, 29.8, 29.8), time = c(0, 1, 3,
5, 6, 0, 1, 3, 5, 6), variable = c(5, 6, 1, 6, 2, 3, 2, NA, 10,
1)), .Names = c("ID", "AGE", "BMI", "time", "var"), row.names = c(NA,
10L), class = "data.frame")

> df
ID AGE BMI time var
1 1 59 23.8 0 5
2 1 59 23.8 1 6
3 1 59 23.8 3 1
4 1 59 23.8 5 6
5 1 59 23.8 6 2
6 2 69 29.8 0 3
7 2 69 29.8 1 2
8 2 69 29.8 3 NA
9 2 69 29.8 5 10
10 2 69 29.8 6 1

AGE和BMI是基线变量,var是在不同时间点(时间)测量的纵向变量。我想从 var 变量中提取基线(时间 = 0)数据并创建新的基线变量 var.baseline。我的数据框看起来像

   > df
ID AGE BMI time variable var.baseline
1 1 59 23.8 0 5 5
2 1 59 23.8 1 6 5
3 1 59 23.8 3 1 5
4 1 59 23.8 5 6 5
5 1 59 23.8 6 2 5
6 2 69 29.8 0 3 3
7 2 69 29.8 1 2 3
8 2 69 29.8 3 NA 3
9 2 69 29.8 5 10 3
10 2 69 29.8 6 1 3

当然,我可以将数据转换为宽格式,基于variable.0创建var.baseline,然后再次转换为长格式。然而,由于我的真实数据集明显更大并且变量更多,所以它变得很麻烦。您能否建议一种更简单的方法来从长格式数据框中提取基线数据。

最佳答案

你可以试试

library(dplyr)
df %>%
group_by(ID) %>%
mutate(var.baseline=var[time==0])

或者

library(data.table)
setDT(df)[,var.baseline:=var[time==0] , by=ID]

或者使用基础R

 merge(df,setNames(subset(df, time==0,select=c("ID", "var")),
c('ID', 'var.baseline')), by='ID')

或者

 library(zoo)
df$var.baseline <- with(df, na.locf(var[!NA^time==0]))

关于r - 从长格式数据框中提取基线值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27614288/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com