R 如何将ddply与自定义函数一起使用并返回原始数据帧和结果

R 如何将ddply与自定义函数一起使用并返回原始数据帧和结果,r,plyr,R,Plyr,请看一看我在一项包含许多试验的任务中获得的数据,每个试验包括5个问题(以下代码将生成一个具有代表性的子集): 现有精度变量是指每个问题的精度。我试图创建一个新的变量,从本质上表明特定试验中的所有问题是否正确(即准确度=1)。对于上述受试者400,结果变量为c(1,1,1,1,1),表明所有问题都是正确的。对于上述401号受试者,结果数据为c(0,0,0,0,0),表明1个或多个问题不正确。为了实现这一点,我尽了最大努力解码Plyr及其变体相当混乱的帮助文件和示例,以得出此解决方案: 逻辑: 1)

请看一看我在一项包含许多试验的任务中获得的数据,每个试验包括5个问题(以下代码将生成一个具有代表性的子集):

现有精度变量是指每个问题的精度。我试图创建一个新的变量,从本质上表明特定试验中的所有问题是否正确(即准确度=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
}

谢谢

我能想到的最简单的方法是使用
mutate
,这是
plyr
transform

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

alloktest你能给你的问题一个合理的标题吗?对不起……我刚刚修改了它。有些,谢谢,它甚至可以用于我的下一个变量,该变量索引每次试验的最后一个问题是否准确:
lastoktest
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")
      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
 alloktest<-ddply(.data=data,c("Subject","trial"), mutate,  
     aok = sum(accuracy) == length(accuracy))