我在一组条件下测量了一组动物('主题')随着时间的推移(' y') ('因子1''因子2&#39)。在持续时间=' z的情况下,在20分钟的固定时间内连续测量响应。得到了。
对于这些数据,我想计算所花费的时间(此处表示为#39;持续时间')' y'在刺激结束后返回其基线值(即0),按“主题”,“因子1”和“因子1”对数据进行分组。和' factor2'。这是一个示例数据集
data<-
data.frame(x=rep(rep(1:20,4),6),y=rnorm(480,mean=4,sd=2),z=rep(3,80),
factor1=rep(rep(c("A","B"),each=20),4),
factor2=rep(c(rep("C",20),rep("D",20),rep("C",20),rep("D",20))),
subject=rep(factor(1:6),each=80))
我试图用dplyr解决这个问题:
library("dplyr")
data %>%
group_by(subject,factor1,factor2) %>%
mutate(duration=nth(x,first(which(y<=0)))-z)
这会在mutate_impl(.data,dots)中产生错误&#34;错误: 评估错误:缺少需要TRUE / FALSE的值。&#34;
我认为这可能会发生,因为有些科目从未回到基线,所以我尝试通过将这些观察结果设置为&#39;持续时间&#39; = 20来修改代码:
data %>%
group_by(subject,factor1,factor2) %>%
mutate(duration=ifelse(
(nth(x,first(which(y<=0)))-z)<=(20-z),
(nth(x,first(which(y<=0)))-z),20)
)
但是,错误消息仍为&#34; mutate_impl(.data,dots)中的错误: 评估错误:缺少需要TRUE / FALSE的值。&#34;
在这两种情况下,当我删除&#34; group_by&#34;时,错误消息就会消失。声明,但我无法弄清楚为什么(除了一些人从未回到基线的事实)。
我如何才能最好地解决这个问题?我想我可能会遗漏一些非常明显的东西......
非常感谢, 安德烈亚斯
答案 0 :(得分:0)
查看我的评论。您的which()调用在某些组中评估为NA
。所以你需要指定如何处理这些情况。例如,用NA代替:
data %>%
group_by(subject,factor1,factor2) %>%
mutate(duration= ifelse(is.na(first(which(y<=0))),NA, nth(x,first(which(y<=0)))-z))
另外,我建议不要使用因素,如果你不明白它们实际上是什么,它们会搞得很多(我没有,所以我不使用它们)。您可以改用字符。