通过试验在 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_by
和 row_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))
我有一个格式不正确的时间序列数据集,其中一列连续包含 所有 时间序列,另一列包含试验编号。
示例:
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_by
和 row_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))