【问题标题】:Extracting baseline values from long format data frame从长格式数据框中提取基线值
【发布时间】:2014-12-23 04:55:27
【问题描述】:

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

 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,然后再转换为长格式。然而,由于我的真实数据集要大得多,而且我有更多的变量,所以它变得很麻烦。您能否建议一种从长格式数据框中提取基线数据的更简单方法。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试

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

    或者

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

    或使用base 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]))
    

    【讨论】:

    • @DSSS 没问题。很高兴它有帮助。
    • 当我使用您的 R 基础解决方案时,R 正在删除一些行。有任何想法吗?编辑:我找到了,我必须添加 all=TRUE。
    • @kim 是的,默认情况下,merge 正在进行内部连接
    猜你喜欢
    • 2016-05-23
    • 2021-05-12
    • 1970-01-01
    • 2020-09-23
    • 2023-03-07
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多