增加行来制作一个完整的长数据集,用于纵向数据分析。

问题描述 投票:1回答:2

我正在处理一个长格式的纵向数据集,其中每个人有1、2或3个时间点。为了执行某些分析,我需要确保每个人都有相同数量的行,即使它由NAs组成,因为他们没有完成某个时间点。

这里是添加行之前的数据样本。

structure(list(Values = c(23, 24, 45, 12, 34, 23), P_ID = c(1, 
1, 2, 2, 2, 3), Event_code = c(1, 2, 1, 2, 3, 1), Site_code = c(1, 
1, 3, 3, 3, 1)), class = "data.frame", row.names = c(NA, -6L))


This is the data I aim to get after adding the relevant rows:


structure(list(Values = c(23, 24, NA, 45, 12, 34, 23, NA, NA), 
P_ID = c(1, 1, 1, 2, 2, 2, 3, 3, 3), Event_code = c(1, 2, 
3, 1, 2, 3, 1, 2, 3), Site_code = c(1, 1, 1, 3, 3, 3, 1, 
1, 1)), class = "data.frame", row.names = c(NA, -9L))

我想写一段代码,根据参与者是否有1次,2次或3次访问,自动添加行到数据集中。理想的情况是,在复制Participant_ID和site_code的同时,其余的数据都是NA,但是如果不可能的话,我只需要创建正确的行数就可以了。

r add rows lme4 longitudinal
2个回答
1
投票

我们可以使用 fill 在做了 complete

library(dplyr)
library(tidyr)
ExpandedDataset %>% 
      complete(P_ID, Event_code) %>%
      fill(Site_code)

0
投票

我带了相当长的代码,但你可以把它归入一个函数中,使之更容易:这是你的数据框架。

df <- data.frame(ID = c(rep("P1", 2), rep("P2", 3), "P3"),
                 Event = c("baseline", "visit 2", "baseline", "visit 2", "visit 3", "baseline"),
                 Event_code = c(1, 2, 1, 2, 3, 1),
                 Site_code = c(1, 1, 2, 2, 2, 1))

每个ID有多少条记录?

values <- summary(df$ID)

一个病人的最大记录数是多少?

target <- max(values)

哪些特定的病人的记录数少于最大值?

uncompliant <- names(which(values<target))

而对于那些信息缺失的患者,你有多少记录?

rowcount <- values[which(values<target)]

那么现在,让我们来创建我们将添加到你原来的数据框架的向量。首先,IDs。

IDs <- vector()
for(i in 1:length(rowcount)){
  y <- rep(uncompliant[i], target - rowcount[i])
  IDs <- c(IDs, y)
}

现在是网站代码

SC <- vector()
for(i in 1:length(rowcount)){
  y <- rep(unique(df$Site_code[which(df$ID == uncompliant[i])]), target - rowcount[i])
  SC <- c(SC, y)
}

最后是我们要引入的值的数据框架。

introduce <- data.frame(ID = IDs, Event = rep(NA, length(IDs)),
                        Event_code = rep(NA, length(IDs)),
                        Site_code = SC)

把原来的数据框和要添加的新值结合起来,并进行分类,使它看起来更漂亮。

final <- as.data.frame(rbind(df, introduce))
final <- final[order(v$ID), ]
© www.soinside.com 2019 - 2024. All rights reserved.