gpt4 book ai didi

r - 如何将 ddply 与自定义函数一起使用并返回原始数据帧以及结果

转载 作者:行者123 更新时间:2023-12-01 22:39:16 25 4
gpt4 key购买 nike

看一下我的来自多次试验任务的数据,每个试验由 5 个问题组成(以下代码将生成一个代表性子集):

Subject<-c(rep(400,20),rep(401,20))
RT<-sample(x=seq(250:850),size=40)
accuracy<-c(1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0)
trial<-rep(rep(1:4, each=5),2)
question<-rep(seq(from=0,to=4),8)
data<-data.frame(Subject,trial,question,RT,accuracy)
remove(Subject,RT,accuracy,trial,question)

看起来像这样:

      ID    trial  question   RT   accuracy
1 400 1 0 131 1
2 400 1 1 768 1
3 400 1 2 300 1
4 400 1 3 130 1
5 400 1 4 168 1
...
36 401 1 0 273 1
37 401 1 1 803 1
38 401 1 2 786 0
39 401 1 3 712 1
40 401 1 4 254 0

现有的准确度变量是指每个问题的准确度。我正在尝试创建一个新变量,该变量本质上表明特定试验中的所有问题是否都正确(即准确性 = 1)。对于上面的主题 400,结果变量将为 c(1,1,1,1,1),表明所有问题都是正确的。对于上面的主题 401,结果数据将为 c(0,0,0,0,0),表明 1 个或多个问题不正确。为了实现这一目标,我尽力解码相当令人困惑的帮助文件和 Plyr 及其变体的示例,以得出此解决方案:

逻辑:1)对于每个主题,分别考虑每个试验中的问题2)查看传递的数据帧的准确性列2) 如果准确率总和等于试验中问题的数量,则返回全 1 的向量,否则返回全 0 的向量

这似乎完成了工作:

allOK<-function(x) {
c<-length(x[,1]) #get number of questions for this trial
s<-sum(x$accuracy) #get sum of accuracies
return ( data.frame(rep(as.integer(s==c))) ) #return allOK vector
}

这是我尝试将其应用于我的数据:

alloktest<-ddply(.data=data,c("Subject","trial"), .fun=allOK, .progress = "text")

它有效,除了 alloktest 仅包含主题、试验和带有结果的新变量。虽然结果是正确的,这很好,但我希望它返回带有新变量(可能名为 aok)的原始数据帧。

我该如何实现这一目标?明确地说,我正在寻找这个:

      ID    trial  question   RT   accuracy  aok
1 400 1 0 131 1 1
2 400 1 1 768 1 1
3 400 1 2 300 1 1
4 400 1 3 130 1 1
5 400 1 4 168 1 1
...
36 401 1 0 273 1 0
37 401 1 1 803 1 0
38 401 1 2 786 0 0
39 401 1 3 712 1 0
40 401 1 4 254 0 0

谢谢!

最佳答案

我能想到的最简单的方法是使用 mutate,它是 transformplyr 变体

 alloktest<-ddply(.data=data,c("Subject","trial"), mutate,  
aok = sum(accuracy) == length(accuracy))

这假设在每个主题和试验组合中,每个问题只有 1 行。

关于r - 如何将 ddply 与自定义函数一起使用并返回原始数据帧以及结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com