如何使用过滤器在 R 中制作纪元
How to make epochs in R using filter
我有一个大型数据框,我想在其中从另一列中的值开始对数据进行子集化,从而增加一定的时间。为了更清楚,数据框看起来像这样:
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
我想要做的是保留从与每个开始试验值相关联的时间戳值开始的 100 到 150 毫秒之间的行,从而形成纪元。所以,在这个例子中,我希望我的数据像这样结束:
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 毫秒的时间段。
希望有人能帮帮我。提前致谢!
通过累加逻辑表达式 ('grp') 和 filter
那些 'Timestamp' 与 first
元素之差的行来创建一个组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
我有一个大型数据框,我想在其中从另一列中的值开始对数据进行子集化,从而增加一定的时间。为了更清楚,数据框看起来像这样:
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
我想要做的是保留从与每个开始试验值相关联的时间戳值开始的 100 到 150 毫秒之间的行,从而形成纪元。所以,在这个例子中,我希望我的数据像这样结束:
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 毫秒的时间段。
希望有人能帮帮我。提前致谢!
通过累加逻辑表达式 ('grp') 和 filter
那些 'Timestamp' 与 first
元素之差的行来创建一个组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