如何为每个参与者创建具有相同行数的数据框

时间:2018-12-05 22:21:24

标签: r

我有一个包含80个主题的数据框,每个主题应该具有50个观察值。但是,由于以前在数据处理中应用了某些排除标准,现在,并不是每个受试者都有50个观察值。但是,要应用一些后续的数据分析过程,我需要将数据框设置为80 *50。因此,我需要将那些缺少的行加回去,并将它们的值指定为0。我想知道如何实现这一点。

我正在用一种简化的情况来说明这一点。 假设数据帧具有三列:Subj,TimeBin和Value。 假设有3个Subjs:S001,S002,S003;并且有6个时区:T0,T1,T2,T3,T4,T5。现在,S001和S002具有所有必需的观测值,但是S003在T2和T5缺少观测值。我应该如何弥补那两个缺失的行?

谢谢!

1 个答案:

答案 0 :(得分:1)

让我们尝试重新创建您描述的情况。

这是一个数据帧,其中(S003,T2)和(S003,T5)的Value为NA:

library(dplyr)
library(tidyr)

set.seed(1001) 
df1 <- data.frame(Subj = rep(c("S001", "S002", "S003"), each = 6),
                  TimeBin = rep(c("T0", "T1", "T2", "T3", "T4", "T5"), 3),
                  Value = c(sample(1:50, 18, replace = TRUE))) %>% 
       mutate(Value = ifelse(Subj == "S003" & grepl("T[2|5]", TimeBin), NA, Value))

“某些先前在数据处理中应用的排除标准”-您未指定具体含义,但我们只删除具有NA值的行:

df1 <- na.omit(df1)

tidyr::complete()可以处理此问题,只要至少某些主题具有完整的行集即可:

df1 %>% 
  complete(Subj, nesting(TimeBin), fill = list(Value = 0))

如果没有完整的主题,则必须在处理后的数据和原始数据之间设计某种连接。