【发布时间】:2021-06-03 19:05:56
【问题描述】:
我有一个带有组变量和整数变量的 data.frame,但缺少数据。
df<-data.frame(group=c(1,1,2,2,3,3),a=as.integer(c(1,2,NA,NA,1,NA)))
我想计算每个组内变量 a 的最大可用值:在我的示例中,我应该为第 1 组获得 2,为第 2 组获得 NA,为第 3 组获得 1。
df %>% group_by(group) %>% mutate(max.a=case_when(sum(!is.na(a))==0 ~ NA_integer_,
T ~ max(a,na.rm=T)))
上面的代码产生了一个错误,似乎是因为在第 2 组中,a 的所有值都丢失了,所以max(a,na.rm=T) 被设置为-Inf,这不是一个整数。
为什么在条件为假的情况下为第 2 组计算这种情况,正如以下验证所证实的那样?
df %>% group_by(group) %>% mutate(test=sum(!is.na(a))==0)
我找到了一种将a 转换为双倍的解决方法,但我仍然收到警告和不满,因为没有找到更好的解决方案。
【问题讨论】:
-
case_when是矢量化的。您在由sum产生的标量上使用它,因此无法正常工作。按照答案中的建议使用未矢量化的if