Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
若行符合条件,则R中为TRUE或FALSE_R - Fatal编程技术网

若行符合条件,则R中为TRUE或FALSE

若行符合条件,则R中为TRUE或FALSE,r,R,我的嵌套数据如下所示: 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计数器将一个添加到下一行,直到行为=TRUE 我期待着这样的结果: ID Date Behavior cou

我的嵌套数据如下所示:

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
计数器将一个添加到下一行,直到
行为
=
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。但是,我很难为当前的
计数器
问题开发解决方案

非常感谢您的任何帮助


我想在每个唯一的
ID
s数组中创建一个计数器,并从中最终提取行级信息-问题是平均需要多长时间才能达到
TRUE

我感觉这里可能会发生什么事。您可以直接回答后一个问题,如下所示:

> library(plyr)
> mean(daply(d, .(ID), function(grp)min(which(grp$Behavior))))
[1] 2.666667

(其中,
d
是您的数据帧。)

这里有一个dplyr解决方案,它可以为每个ID中的每个TRUE查找行号:

library(dplyr)
newdf <- yourdataframe %>%
           group_by(ID) %>%
           summarise(
             ftrue = which(Behavior)) 
库(dplyr)
新DF%
分组依据(ID)%>%
总结(
ftrue=哪个(行为))

do.call(rbind,by(df,by(df$ID),function(x){n=nrow(x);data.frame(x,Counter=c)(1:(我想在每个惟一的
ID
s数组中创建一个计数器,并从那里最终提取行级信息-问题是平均需要多长时间才能达到
TRUE
…您可以执行
库(data.table);setDT(df)[计数器:=c(seq_len(which(Behavior)),rep(NA,.N-which(Behavior))),ID]
但我会选择@NPEs solution这是我想要做的-但是我得到了一个
无效的'times'参数
错误。有没有常见的此类错误的嫌疑?我无法复制错误,但我猜它指的是'rep'中的
times
参数。只有当每个
ID
都发生一个错误时,这个解决方案才会起作用如果
TRUE
,则会收到一个
值,该值应为单个值
错误。
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)