我有嵌套的数据,如下所示:
ID Date Behavior
1 1 FALSE
1 2 FALSE
1 3 TRUE
2 3 FALSE
2 5 FALSE
2 6 TRUE
2 7 FALSE
3 1 FALSE
3 2 TRUE
我想创建一个名为counter
的列,其中对于每个唯一ID
,计数器会将一个添加到下一行,直到Behavior
= TRUE
我期待这个结果:
ID Date Behavior counter
1 1 FALSE 1
1 2 FALSE 2
1 3 TRUE 3
2 3 FALSE 1
2 5 FALSE 2
2 6 TRUE 3
2 7 FALSE
3 1 FALSE 1
3 2 TRUE 2
最后,我想提取每个唯一ID发生观察的最小counter
。但是,我无法为当前counter
问题开发解决方案。
非常感谢任何和所有帮助!
答案 0 :(得分:1)
我想在每个唯一
ID
数组中创建一个计数器,并从那里最终得出行级别信息 - 问题是到达{{1}平均需要多长时间}
我觉得这里可能会有XY problem。你可以直接回答你的后一个问题,如下:
TRUE
(其中> library(plyr)
> mean(daply(d, .(ID), function(grp)min(which(grp$Behavior))))
[1] 2.666667
是您的数据框。)
答案 1 :(得分:0)
这是一个dplyr解决方案,可以在每个ID中找到每个TRUE的行号:
library(dplyr)
newdf <- yourdataframe %>%
group_by(ID) %>%
summarise(
ftrue = which(Behavior))
答案 2 :(得分:0)
do.call(rbind, by(df, list(df$ID), function(x) {n = nrow(x); data.frame(x, Counter = c(1:(m<-which(x$Behavior)), rep(NA, n-m)))}))
ID Date Behavior Counter
1.1 1 1 FALSE 1
1.2 1 2 FALSE 2
1.3 1 3 TRUE 3
2.4 2 3 FALSE 1
2.5 2 5 FALSE 2
2.6 2 6 TRUE 3
2.7 2 7 FALSE NA
3.8 3 1 FALSE 1
3.9 3 2 TRUE 2
df = read.table(text = "ID Date Behavior
1 1 FALSE
1 2 FALSE
1 3 TRUE
2 3 FALSE
2 5 FALSE
2 6 TRUE
2 7 FALSE
3 1 FALSE
3 2 TRUE", header = T)