Вот потенциальное решение последнего абзаца:
library(tidyverse)
set.seed(1234)
df <- as.data.frame(cbind(rep(1,16),
cbind(rep(1:2,each = 8),
cbind(rep(1:8,2)),
cbind(sample(c(1,0),16,T),
cbind(rep(1:8,2),
sample(300:800,16))))))
names(df) <- c("Subject","Session","Trial","Stim.ACC","Stim.OnsetTime","Stim.RT")
... создает это data.frame
.
Subject Session Trial Stim.ACC Stim.OnsetTime Stim.RT
1 1 1 1 0 1 399
2 1 1 2 1 2 730
3 1 1 3 1 3 498
4 1 1 4 0 4 376
5 1 1 5 0 5 468
6 1 1 6 0 6 482
7 1 1 7 0 7 511
8 1 1 8 0 8 392
9 1 2 1 1 1 624
10 1 2 2 1 2 752
11 1 2 3 1 3 660
12 1 2 4 1 4 732
13 1 2 5 1 5 766
14 1 2 6 1 6 395
15 1 2 7 1 7 530
16 1 2 8 0 8 487
Создайте bad
data.frame
или вектор:
bad <- unite(data.frame(rbind(c(1,1),rbind(c(10,3),rbind(c(12,2),c(4,2))))))
1 1_1
2 10_3
3 12_2
4 4_2
Каждая пара является предметом и сеансом. Вы тоже можете сделать это вектором.
bad <- c("1_1","10_3","12_2","4_2")
Затем создайте столбец «плохой код» и фильтр:
df %>%
unite(col = "badcode",c(Subject,Session),remove = F) %>%
filter(!(badcode %in% bad[,1]))
Создайте список плохих пар субъекта и сеанса, а затем отфильтруйте по этому списку, используя эту последнюю строку (если это вектор, вам не нужно вводить с помощью [,1]
).