通过试验在 R 中传播时间序列数据

Spreading time series data in R by trial

我有一个格式不正确的时间序列数据集,其中一列连续包含 所有 时间序列,另一列包含试验编号。

示例:

Trial Fx
1 7.9
1 8.0
1 8.1
1 8.2
2 6.5
2 6.6
2 6.7
2 6.8

最终目标是将signal::filtfilt()应用于每个时间序列;但是,必须单独过滤每个时间序列才能使其正常工作。

我在 filtfilt() 之前尝试了 group_by(),这导致了错误。因此,我想通过试验将时间序列 (Fx) 分散到多个列中,这样我就可以分别过滤每一列,如下所示:

Fx_1 Fx_2
7.9 6.5
8.0 6.6
8.1 6.7
8.2 6.8

您可以使用 tidyverse 中的 pivot_wider 来完成此操作。我使用 group_byrow_number 添加了一个索引。然后,我在旋转更宽后删除了此列。

library(tidyverse)
  
df %>%
  group_by(Trial) %>% 
  mutate(grouped_id = row_number()) %>%
  pivot_wider(names_from = Trial,
              values_from = Fx,
              names_prefix = "Fx_") %>%
  select(-grouped_id)

输出

# A tibble: 4 × 2
   Fx_1  Fx_2
  <dbl> <dbl>
1   7.9   6.5
2   8     6.6
3   8.1   6.7
4   8.2   6.8

数据

df <-
  structure(list(
    Trial = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L),
    Fx = c(7.9, 8, 8.1, 8.2, 6.5, 6.6, 6.7, 6.8)
  ),
  class = "data.frame",
  row.names = c(NA,-8L))