我在一组条件('factor1','factor2')中测量了一组动物('受试者')中随时间('x')的响应('y')。在给出持续时间='z'的刺激后,连续测量20分钟的固定时间。
对于这些数据,我想计算刺激结束后'y'返回其基线值(0)的时间(此处称为'持续时间'),将数据按'主题','factor1'分组和'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)中的错误:评估错误:缺少需要TRUE / FALSE的值。”
我认为这可能会发生,因为一些主题从未返回到基线,所以我尝试通过将这些观察设置为'duration'= 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)
)
但是,错误消息仍为“mutate_impl(.data,dots)中的错误:评估错误:缺少需要TRUE / FALSE的值。”
在这两种情况下,当我删除“group_by”语句时,错误消息消失,但我无法弄清楚为什么(除了有些人从未返回基线的事实)。
我如何才能最好地解决这个问题?我想我可能会遗漏一些非常明显的东西......
非常感谢,Andreas
看我的评论。你的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))
此外,我建议不要使用因素,如果你不明白它们实际上是什么,它们会搞得很多(我没有,所以我不使用它们)。您可以改用字符。