我有一个看起来像这样的数据集(由于 R
而以较长格式(
Participant RT Session Testing_Condition
1 352 1 0
1 526 1 0
1 624 1 0
1 424 2 0
1 356 2 0
1 475 2 0
2 256 1 1
2 426 1 1
2 562 1 1
2 426 1 0
2 526 2 0
2 634 2 0
我只想在两个会话中选择具有Testing_Condition = 0
的参与者。我知道如何进行子集,我只是不知道如何确保子集不包含一个会话中condition = 0
中的参与者,而是在另一个会话中不包含参与者。我应该创建第三个变量,即其整体testing_condition
的交界处或其他内容吗?如果是这样,我应该怎么做?
在这种情况下,我希望输出仅是participant 1
的选择。
我们可以做
library(dplyr)
df1 %>%
group_by(Participant) %>%
filter(any(Testing_Condition[Session ==1]== 0) &
any(Testing_Condition[Session ==2] == 0))
也可以是
df1 %>%
group_by(Participant, Session) %>%
filter(all(Testing_Condition == 0)) %>%
group_by(Participant) %>%
filter(all(1:2 %in% Session))
我们可以用Testing_Condition == 1
删除具有any
值的组。
为了在基本r中这样做,我们可以使用 ave
df[with(df, !ave(Testing_Condition == 1, Participant, FUN = any)), ]
# Participant RT Session Testing_Condition
#1 1 352 1 0
#2 1 526 1 0
#3 1 624 1 0
#4 1 424 2 0
#5 1 356 2 0
#6 1 475 2 0
与dplyr
相同的filter
library(dplyr)
df %>%
group_by(Participant) %>%
filter(!any(Testing_Condition == 1))