我有一個大資料框,我想將其從 120hz 下采樣到 40hz。盡管我可以從資料框中每隔三行取一次,但這還不夠一致。
我有類似以下資料框的內容:
df <- data.frame(RelativeTime = c(0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550),
Marker = c("start_trial", "", "", "", "", "", "", "", "", "", "", "", "start_trial", "", "", "", "", "", "", "", "", "", "", ""),
size=c(NA, -1, -1, 4, -1, -1 , 3.5, -1, -1, 4, -1, -1, NA, 4, -1, -1, 2, -1, -1, -1, -1, -1, 4.5, -1),
trial=c("trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial 1", "trial1", "trial1", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2" ))
我想要的是size為每個識別第一個非 0 條目trial。然后從那里開始過濾 data.frame,以便只保留每第三行。正如您在此示例中所看到的,每個第一個非 0 數字的起點相對于“trial_onset”是可變的,這給我帶來了問題!此外,我需要這種特殊方法(而不是僅僅過濾掉非 0 值)的原因是,有時“大小”值很可能也是 -1,只是由于資料收集點失敗。我需要保留這些以供進一步處理。所以,我想最終得到以下資料框:
df2 <- data.frame(RelativeTime = c(0, 150, 300, 450, 0, 50, 200, 350, 500),
Marker = c("start_trial", "", "", "", "start_trial", "", "", "", ""),
size=c(NA, 4, 3.5, 4, NA, 4, 2, -1, 4.5),
trial=c("trial 1", "trial 1", "trial 1", "trial 1", "trial 2", "trial 2", "trial 2", "trial 2", "trial 2"))
非常感謝您的幫助!
uj5u.com熱心網友回復:
你在找這個嗎?
library(dplyr)
df %>%
group_by(trial) %>%
filter(cumsum(coalesce(size, -1) > 0) >= 1) %>%
filter(1:n() %% 3 == 1)
# A tibble: 7 x 4
# Groups: trial [2]
RelativeTime Marker size trial
<dbl> <chr> <dbl> <chr>
1 150 "" 4 trial 1
2 300 "" 3.5 trial 1
3 450 "" 4 trial 1
4 50 "" 4 trial 2
5 200 "" 2 trial 2
6 350 "" 5 trial 2
7 500 "" 4.5 trial 2
如果您還想為每個試驗保留第一行,您可以使用bind_rows.
uj5u.com熱心網友回復:
另一種解決方案:
library(dplyr)
df %>%
group_by(trial) %>%
mutate(start = cumany(size > 0)) %>%
group_by(trial, start) %>%
filter(Marker == "start_trial" | seq(start[start == T]) %% 3 == 1)
RelativeTime Marker size trial start
<dbl> <chr> <dbl> <chr> <lgl>
1 0 "start_trial" NA trial 1 NA
2 150 "" 4 trial 1 TRUE
3 300 "" 3.5 trial 1 TRUE
4 450 "" 4 trial 1 TRUE
5 0 "start_trial" NA trial 2 NA
6 50 "" 4 trial 2 TRUE
7 200 "" 2 trial 2 TRUE
8 350 "" 5 trial 2 TRUE
9 500 "" 4.5 trial 2 TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/431728.html
上一篇:獲取每個集群中的元素
