Summary()dplyr病例的子集

Summary()dplyr病例的子集,r,dplyr,tidyverse,R,Dplyr,Tidyverse,数据: structure(list(subjnum = c(1L, 1L, 1L, 1L, 1L, 1L), expVers = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Angry", "Happy"), class = "factor"), intendedSOA = c(1000L, 1000L, 100L, 100L, 50L, 50L), compatabi

数据:

structure(list(subjnum = c(1L, 1L, 1L, 1L, 1L, 1L), expVers = structure(c(2L, 
2L, 2L, 2L, 2L, 2L), .Label = c("Angry", "Happy"), class = "factor"), 
    intendedSOA = c(1000L, 1000L, 100L, 100L, 50L, 50L), compatability = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L), .Label = c("Comp", "Incomp"), class = "factor"), 
    T1RT = c(229L, 229L, 277L, 277L, 280L, 280L), T2RT = c(791L, 
    791L, 563L, 563L, 760L, 760L), T1ACC = c(1L, 1L, 1L, 1L, 
    1L, 1L), T2ACC = c(1L, 1L, 1L, 1L, 1L, 1L)), row.names = c(NA, 
6L), class = "data.frame")
我想通过
mean()
总结列T1RT、T2RT、T1ACC和T2ACC,并通过数据中的其他变量/因素(subnum、intendedSOA、compatibility、expVers)组织这些值。然而,变量T1RT和T2RT的摘要不应包含
T1ACC或T2ACC==0的试验,但变量T1ACC和T2ACC的摘要应包含所有值(无条件总和)。我尝试通过执行以下操作在
summary()
中包含
if()
参数:

> backcomplong2 <- ACC %>%
+   select(subjnum, expVers,intendedSOA, compatability, T1RT, T2RT, T1ACC, T2ACC)%>%
+   group_by(subjnum, compatability, expVers, intendedSOA)%>%
+   summarise(T1RT = if(T1ACC == 1 && T2ACC == 1) round(mean(T1RT)), 
+             T2RT = if(T1ACC == 1 && T2ACC == 1) round(mean(T2RT)),
+             T1ACC = mean(T1ACC), 
+             T2ACC = mean(T2ACC))
******请注意,我的可再现数据不会返回相同的错误*********
较大的数据返回错误,我在这里没有提供,因为它太大,无法用
dput()
粘贴到这个问题中


我想我使用的
if()
语句不正确,也许我可以试试
if\u else()
?另一个解决方法是简单地做两次
summary()
,一次用于RT,另一次用于ACC,但这更简洁。

如果要检查一个条件,请输入
,但不要输入
else
,并告诉当条件不满足时需要做什么。因此,它返回一个导致错误的
NULL
对象

但是,如果您只对那些要取其
平均值的值进行子集,则此处不需要
if
/
else
。试试这个:

library(dplyr)

ACC %>%
   group_by(subjnum, compatability, expVers, intendedSOA)%>%
   summarise(T1RT = mean(T1RT[T1ACC == 1 & T2ACC == 1]), 
             T2RT =  mean(T2RT[T1ACC == 1 & T2ACC == 1]),
             T1ACC = mean(T1ACC), 
             T2ACC = mean(T2ACC))

很简单,非常感谢!您的解决方案只是T1RT的子集。
library(dplyr)

ACC %>%
   group_by(subjnum, compatability, expVers, intendedSOA)%>%
   summarise(T1RT = mean(T1RT[T1ACC == 1 & T2ACC == 1]), 
             T2RT =  mean(T2RT[T1ACC == 1 & T2ACC == 1]),
             T1ACC = mean(T1ACC), 
             T2ACC = mean(T2ACC))