仅计算正确试验的平均反应时间

时间:2016-03-30 12:54:25

标签: r mean

我发现其他人有类似的问题here。但我对编程和R很新,我不明白如何根据我的情况调整答案。我的数据看起来像以下代码可以生成的内容:

df1 = data.frame(ACC1 = sample((1:0), 16, replace = TRUE), RT1 = sample((1000:2000), 16, replace = TRUE))
df2 = data.frame(ACC2 = sample((1:0), 16, replace = TRUE), RT2 = sample((1000:2000), 16, replace = TRUE))
cbind(df1,df2)

基本上我有许多准确性变量(ACC)和反应时间(RT)。 ACC1对应于RT1,依此类推。每行都是一个参与者。在我的真实数据中,每个参与者都进行了数百次试验,但在这个模拟数据中,您可以看到2个试验。我想要的是一个有效的解决方案,动态选择反应时间但仅用于参与者给出正确响应(即ACC = 1)的试验,然后计算只有正确试验的平均反应时间。 希望我的问题很清楚,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你有一个包含ACC1,RT1,... ACC100,RT100列的数据框,并且你想只在ACCx为1时计算RTx的平均值(对每个参与者=行都是如此)。

如果你想要查看行,这是一个很好的方法,它可以使用R中的apply函数。

input<-cbind(df1, ... df100)
subset<-grep(pattern = "ACC", x = colnames(input)) ###which are the ACC columns?
result<-apply(X = input,
    MARGIN = 1 ### tells apply to go row by row not column by column
    FUN = function(z){ # an anonymous function
     sub<-which(z[subset]==1) ##Returns x if ACCx is 1
     return(mean(z[2*sub])) ## If x is 1, we want to select column 2*x based on your example
    }

编辑:对于非有序列/中间的其他列:

input<-cbind(df1, ... df100)
input<-input[,order(colnames(input))] ###make sure you have ACC1 ... ACC100, ... ,RT1, ... RT100
C<-colnames(input)
subset<-grep(pattern = "ACC", x = C) ###which are the ACC columns?
result<-apply(X = input,
    MARGIN = 1 ### tells apply to go row by row not column by column
    FUN = function(z){ # an anonymous function
     sub<-which(z[subset]==1) ##Returns x if ACCx is 1
     RTnames<-paste("RT",sub,sep=1)
     return(mean(z[C %in% RTnames])) 
    }