如何在长格式时间序列数据中按时间点拆分输出?

How to split output by timepoint in long format time-series data?

我想使用 naniar 包中的 gg_miss_var() 来查看数据框中每个时间点的缺失数据量。数据框包含长格式的时间序列数据。

我有适用于整个 df 的代码(参见下面 代码 中的#1)。我如何扩展它以产生按 Timepoint 分割的输出(请参阅下面 Code 中的 #2 以了解我尝试的代码)?

澄清一下,我想做的基本上是使用每个时间点的数据(根据 TimepointCode 中重复 #1多变的)。因此,每个变量的缺失数据量将分别针对基线数据、year1 数据和 year2 数据呈现。目前,Code 中的#1 查看所有时间点(即基线、year1、year2)组合的缺失数据。

我将使用此数据 df 按 时间点 进行进一步分析,例如回归,因此理想情况下希望代码易于为这些目的操作。

下面是一个示例数据框(参见示例数据)。请注意,我正在使用的数据框要大得多(即 N = ~21,900)

代码

library(tidyverse)
library(naniar) # for gg_miss_var()

# 1. All missing data
gg_miss_var(df[,c("Score.1","Score.2","Score.3","Score.4")]) 

# 2. Missing data split by timepoint [does not work]
df %>% 
  group_by(Timepoint) %>% 
  gg_miss_var(.[,c("Score.1","Score.2","Score.3","Score.4")]) %>%
  ungroup()

示例数据


df <- structure(list(ID = c(1L, 1L, 1L, 2L, 
2L, 3L),  Timepoint = c("baseline", "year1", "year2", 
"baseline", "year1", "baseline"), Score.1 = c(NA, 6, 4, 4, 5, 5), Score.2 = c(11, 
10, 8, 8, 8, 9), Score.3 = c(4, NA, 9, 10, 8, 6), Score.4 = c(22, 
50, 33, 28, 27, 33)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

示例输出

下面是在代码中为#1 生成的输出。我想要的是以下副本,仅使用相应时间点(即基线、year1、year2)的数据。

你期待吗?

library(tidyverse)
library(naniar)
df %>% select(-ID) %>% 
  group_by(Timepoint) %>% 
  gg_miss_var(facet = Timepoint)

除非您更喜欢三个独立的地块。然后这样做:

df %>% select(-ID) %>% 
  group_by(Timepoint) %>% 
  group_map(~gg_miss_var(.x)+ggtitle(.y))

这是您期待的效果吗?