在R中计算Fales之前的Falses

时间:2014-07-16 18:38:35

标签: r plyr

我尝试使用R来查找在300,000多行的数据帧中成功之前的平均尝试次数。数据结构如下。

EventID  SubjectID  ActionID  Success  DateUpdated
a        b          c         TRUE     2014-06-21 20:20:08.575032+00
b        a          c         FALSE    2014-06-20 02:58:40.70699+00

我仍在通过R学习。看起来我可以使用ddply根据主题和动作将框架分开(我想看看给定主题在成功之前尝试动作的次数),但我无法弄清楚如何编写我需要应用的公式。

4 个答案:

答案 0 :(得分:2)

library(data.table)

# example data
dt = data.table(group = c(1,1,1,1,1,2,2), success = c(F,F,T,F,T,F,T))
#   group success
#1:     1   FALSE
#2:     1   FALSE
#3:     1    TRUE
#4:     1   FALSE
#5:     1    TRUE
#6:     2   FALSE
#7:     2    TRUE

dt[, which(success)[1] - 1, by = group]
#   group V1
#1:     1  2
#2:     2  1

group替换为list(subject, action)或适合您的数据的任何内容(将其从data.table转换为data.frame后)。

答案 1 :(得分:2)

跟进Tarehman的建议,因为我喜欢rle

foo <-  rle(data$Success)

mean(foo$lengths[foo$values==FALSE])

答案 2 :(得分:1)

这可能是一个完全不同的问题的答案,但这是否接近你想要的?

tfs <- sample(c(FALSE,TRUE),size = 50, replace = TRUE, prob = c(0.8,0.2))

tfs_sums <- cumsum(!tfs)
repsums <- tfs_sums[duplicated(tfs_sums)]
mean(repsums - c(0,repsums[-length(repsums)]))

tfs
     [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[20] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
[39] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

repsums
1  6  8  9 20 20 20 20 24 26 31 36

repsums - c(0,repsums[-length(repsums)])
1  5  2  1 11  0  0  0  4  2  5  5

显示的最后一个向量是每个连续&#34;运行的长度&#34;向量tfs

中的FALSE值

答案 3 :(得分:1)

你可以使用data.table解决所需问题,如下所示:

library (data.table)

  df=data.frame(EventID=c("a","b","c","d"),SubjectID=c("b","a","a","a"),ActionID=c("c","c","c","c"),Success=c(TRUE,FALSE,FALSE,TRUE))

dt=data.table(df)

dt[ , Index := 1:.N , by = c("SubjectID" , "ActionID","Success") ]

现在,此索引列将保留每个主题/操作连续实验所需的数字。您需要聚合才能获得该数字(最大数量)

result=stats:::aggregate.formula(Index~(SubjectID+ActionID),data=dt,FUN= function(x) max(x))

所以这会给你最大的索引,它是你达到真实之前的谬误数。请注意,您可能需要进行进一步处理以过滤掉从未有过真正

的主题