我有一个包含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缺少观测值。我应该如何弥补那两个缺失的行?
谢谢!
答案 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))
如果没有完整的主题,则必须在处理后的数据和原始数据之间设计某种连接。