【问题标题】:How to make epochs in R using filter如何使用过滤器在 R 中创建纪元
【发布时间】:2021-05-04 15:52:07
【问题描述】:

我有一个大型数据框,我想从另一列中的值开始对数据进行子集化,从而增加一定的时间。为了更清楚,数据框看起来像这样:

df <- data.frame(TimeStamp = c(100, 150, 200, 250, 300, 350, 400, 450, 500, 550), 
             Marker = c("start_trial", "", "", "", "", "start_trial", "", "", "", ""), 
             size=c(3, 5, 1, 5, 4, 6 , 9, 2, 4, 8),
             trial=c("trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2"))

   TimeStamp      Marker size   trial
1        100 start_trial    3 trial 1
2        150                5 trial 1
3        200                1 trial 1
4        250                5 trial 1
5        300                4 trial 1
6        350 start_trial    6 trial 2
7        400                9 trial 2
8        450                2 trial 2
9        500                4 trial 2
10       550                8 trial 2

我想要做的是保留从与每个开始试验值关联的 TimeStamp 值开始的 100 到 150 毫秒之间的行,从而进行 epochs。所以,在这个例子中,我希望我的数据最终是这样的:

df2 <- data.frame(TimeStamp = c(200, 250, 450, 500), Marker = c("", "", "", ""), size=c(1, 5, 2, 4), trial=c("trial 1", "trial 1", "trial 2", "trial 2"))

  TimeStamp Marker size   trial
1       200           1 trial 1
2       250           5 trial 1
3       450           2 trial 2
4       500           4 trial 2

我的实际数据有将近一百万行,其中有数千个“开始试验”,并且 TimeStamp 值没有整齐地划分为 50 毫秒的时间段。

我希望有人可以帮助我。提前致谢!

【问题讨论】:

  • @akrun 我会改写:我需要保留从关联的 TimeStamp 值开始的 100 到 150 毫秒之间的行。因此,第一个“开始试用”值的值为 100 毫秒。然后,我想将行保持在 200 到 250 毫秒之间,因为 (100 + 100: 100 + 150)。对于第二个“开始试用”值,我想要相同的值:TimeStamp 列中的开始试用值是 350 毫秒,所以我想将行保持在 450 到 500 之间(350 + 100:350 + 150)。
  • 您可以查看以下解决方案

标签: r dataframe dplyr data-science


【解决方案1】:

通过对逻辑表达式 ('grp') 和 filterfirst 元素的 'Timestamp' 差异为 between 100 和 150 的那些行求和来创建一个组

library(dplyr)
df %>%
   group_by(grp = cumsum(Marker == 'start_trial')) %>% 
   filter(between(TimeStamp - first(TimeStamp), 100, 150) ) %>%
   ungroup %>%
   select(-grp)

-输出

# A tibble: 4 x 4
#  TimeStamp Marker  size trial  
#      <dbl> <chr>  <dbl> <chr>  
#1       200 ""         1 trial 1
#2       250 ""         5 trial 1
#3       450 ""         2 trial 2
#4       500 ""         4 trial 2

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多