R ';如果';用于基于条件的连续试验的平均值
我在下面有这个数据集,我想计算每个R ';如果';用于基于条件的连续试验的平均值,r,data.table,R,Data.table,我在下面有这个数据集,我想计算每个ID和条件下在一个佣金错误之前连续5次点击的平均值(扫视) 到目前为止,我已经尝试: Data[, roll := Reduce('+', shift(HIT, 0:4)), by =list(ID, CONDITION)] if (Data $roll == 5 & Data$COMISSION_ERROR[c(which(Data$roll == 5) +1), ] == 1) A<- with(Data, mean(SACCADIC_R
ID
和条件下在一个佣金错误之前连续5次点击的平均值(扫视)
到目前为止,我已经尝试:
Data[, roll := Reduce('+', shift(HIT, 0:4)), by =list(ID, CONDITION)]
if (Data $roll == 5 & Data$COMISSION_ERROR[c(which(Data$roll == 5) +1), ] == 1)
A<- with(Data, mean(SACCADIC_RT[roll ==5]), by =list(ID, CONDITION))
输出的一个示例是:
ID | CONDITION | x
1 square_1 209.6
2 square_2 222.8
@rconradin您可以使用数据表
和动物园
包的组合
require(data.table); require(zoo)
data[ , A := rollmeanr(SACCADIC_RT, k = 5, fill = NA)][
roll == 5 & lead(COMMISSION_ERROR) == 1]
rollmeanr
来自zoo
软件包
此外,为了完整性,如果只需要指定三列,则可以使用
data[ , A := rollmeanr(SACCADIC_RT, k = 5, fill = NA)][
roll == 5 & lead(COMMISSION_ERROR) == 1, .(ID, CONDITION, A)]
您是否使用了其他软件包?能否提供所需输出的示例?在计算之前您是否setkey
?这个数据集中有什么错误?在计算之前:Data除了Data.table之外,我没有使用任何其他包@乔戈。关于如何改进我的代码有什么想法吗?谢谢你的回复。实际上,我得到了错误`error in eval(expr、envir、enclose):找不到函数“lead”`并且我确实require(zoo)
。是否可以根据ID
和CONDITION
使用新列创建新的数据子集,而不是将列添加到现有的data.table中?我试着用lag
代替,它似乎每连续5次点击就计算平均值(扫视时间)
,但下一次试验是commission\u ERROR==1
对不起lead
和lag
是dplyr
的一部分。在data.table
中的等价物实际上是shift
。所以我尝试了data[,roll:=Reduce(+',shift(HIT,0:4)),by=list(ID,CONDITION)]
data[,A:=rollmanr(SACCADIC\RT,k=5,fill=NA)][roll==5&shift(COMMISSION\u ERROR)==1],(ID,CONDITION,A)]
并且它在A
列中为我提供了NAs
。您想要A
中的值是什么?是否有方法仅提取我感兴趣的A
中的值?此时,A
列会为每5次点击保存rollmeanr
,但不会只给出佣金错误之前的信息。不过,我只想对这些试验进行子集/聚合
data[ , A := rollmeanr(SACCADIC_RT, k = 5, fill = NA)][
roll == 5 & lead(COMMISSION_ERROR) == 1, .(ID, CONDITION, A)]