传播和对齐数据

问题描述 投票:0回答:1

我有一个数据框,我想在其中对齐恰好重叠的事件。例如:我有一个“波”,其中“开始”和“结束”之间有一个时间跨度,我想确定其他“波”是否在“开始”和“结束”之间的时间范围内开始或结束此“wave”id 的“。我也不希望在后续的对齐检查中考虑这些对齐波。

基本上,我希望最终得到一个看起来像这样的数据框:

desired resulting data frame

谢谢您的指导!

# Example EAD data with different preparations
example_ead <- tibble(
  wave = c("EAD1", "EAD1", "EAD1", "EAD2", "EAD2", "EAD2"),
  onset_min = c(4.14, 4.16, 3.30, 5.04, 5.29, 5.11),
  end_min = c(4.21, 4.24, 3.35, 5.16, 5.37, 5.16),
  amplitude_mv = c(-4.72, -1.92, -4.16, -3.42, -2.96, -3.33)
)

# Function to identify and reshape overlapping depolarization events
identify_and_reshape_events <- function(data) {
  data %>%
    # Group by wave and create row numbers
    group_by(wave) %>%
    mutate(event_id = row_number()) %>%
    ungroup() %>%
    # Perform a self-join to identify overlapping events
    left_join(data, by = "wave", suffix = c(".1", ".2")) %>%
    filter(
      # Filter for overlapping events based on onset_min and end_min
      onset_min.1 <= end_min.2 & end_min.1 >= onset_min.2 &
        event_id.1 != event_id.2  # Ensure different events within the same wave
    ) %>%
    # Spread the data by wave
    pivot_wider(
      names_from = wave,
      values_from = c(onset_min, end_min, amplitude_mv),
      names_glue = "{.value}_{wave}"
    ) %>%
    # Select columns in the desired order
    select(
      matches("^onset_min|^end_min|^amplitude_mv")
    )
}

# Apply function to identify and reshape overlapping depolarization events
overlapping_events <- identify_and_reshape_events(example_ead)
r
1个回答
0
投票

这是使用 tidyverse 的方法,但我希望看到更优雅的解决方案。

example_ead |>
  mutate(orig_row = row_number(), .before = 1) |>
  arrange(wave, end_min) |>
  mutate(align_grp = cumsum(onset_min > lag(end_min,1,T)),
         .by = wave) |>
  mutate(obs = row_number(), .by = c(wave, align_grp)) |>
  arrange(orig_row) |>
  select(-orig_row) |>
  pivot_wider(names_from = obs, 
              values_from = c(onset_min:amplitude_mv), names_vary = "slowest")

使用示例数据的结果,与OP中的屏幕截图不同:

# A tibble: 4 × 8
  wave  align_grp onset_min_1 end_min_1 amplitude_mv_1 onset_min_2 end_min_2 amplitude_mv_2
  <chr>     <int>       <dbl>     <dbl>          <dbl>       <dbl>     <dbl>          <dbl>
1 EAD1          2        4.14      4.21          -4.72        4.16      4.24          -1.92
2 EAD1          1        3.3       3.35          -4.16       NA        NA             NA   
3 EAD2          1        5.04      5.16          -3.42        5.11      5.16          -3.33
4 EAD2          2        5.29      5.37          -2.96       NA        NA             NA 
© www.soinside.com 2019 - 2024. All rights reserved.