如何在长格式时间序列数据中按时间点拆分输出?
Posted
技术标签:
【中文标题】如何在长格式时间序列数据中按时间点拆分输出?【英文标题】:How to split output by timepoint in long format time-series data? 【发布时间】:2021-11-06 08:15:52 【问题描述】:我想使用 naniar
包中的 gg_miss_var() 来查看我的数据框中每个时间点的缺失数据量。数据框包含长格式的时间序列数据。
我的代码可以与 df 整体配合使用(请参阅下面 代码 中的 #1)。如何扩展它以生成按 Timepoint 拆分的输出(请参阅下面 代码 中的 #2 了解我尝试的代码)?
为了澄清,我想做的基本上是使用每个时间点的数据(每个 Timepoint 变量)在 代码 中重复 #1。因此,每个变量的缺失数据量将分别针对基线数据、第 1 年数据和第 2 年数据呈现。目前,代码中的 #1 查看所有时间点(即基线、第 1 年、第 2 年)的缺失数据。
我将使用此数据 df 按 Timepoint 进行进一步分析,例如回归,因此理想情况下,我会喜欢易于为这些目的操作的代码。
下面是一个示例数据框(请参阅示例数据)。请注意,我正在使用的数据框要大得多(即 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的输出。我想要的是下面的副本,仅使用来自相应时间点的数据(即基线、第 1 年、第 2 年)。
【问题讨论】:
你能解释一下你所说的“分裂”是什么意思吗?如果每个 Timepoint 类baseline, year1, yeare2
的数量相同,您可以在该列上 pivot_wider
并为每个类获取一个单独的列。如果要分别分析每个 Timepoint 类,可以使用filter
制作单独的数据集。你能举一个你最终想要做什么的例子吗?
请添加使用的包,因为据我所知gg_miss_var
不是基本 R 函数。
您的预期输出如何?
【参考方案1】:
你期待吗?
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))
这是你期待的效果吗?
【讨论】:
以上是关于如何在长格式时间序列数据中按时间点拆分输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何从python中的字典输出中组装时间序列数据以进行监督分类