如何基于两个变量对数据进行子集

时间:2019-08-05 19:13:18

标签: r select

我有一个看起来像这样的数据集(由于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的选择。

2 个答案:

答案 0 :(得分:2)

我们可以做到

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))

答案 1 :(得分:0)

我们可以使用<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>删除具有any值的组。

要在基数R中执行此操作,我们可以使用Testing_Condition == 1

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