调用dplyr::coalesce
会返回第一个非缺失值:
> vec1 <- c(11, 12, NA, NA, NA)
> vec2 <- c(21, 22, NA, NA, 25)
> vec3 <- c(NA, 32, NA, 34, 35)
> coalesce(vec1, vec2, vec3)
[1] 11 12 NA 34 25
是否有类似于调用 vec1 | vec2 | vec3
的函数(返回值而不是逻辑值)?
类似于 vec1 & vec2 & vec3
的函数,当没有缺失值时返回最后一个值?这种情况经常出现,但我找不到一种简洁/简单的方法来实现它。
> vec1 <- c(11, 12, NA, NA, NA)
> vec2 <- c(21, 22, NA, NA, 25)
> vec3 <- c(NA, 32, NA, 34, 35)
> ideal_fn(vec1, vec2, vec3)
[1] NA 32 NA NA NA
对于数字和逻辑值,我可以使用
vec3[vec1 & vec2 & vec3]
或ifelse(vec1 & vec2, vec3)
来轻松/简洁完成此操作。但它们不能用于字符向量。有比
ifelse(!is.na(vec1) & !is.na(vec2) & !is.na(vec3), vec3, NA)
更好的方法吗?这似乎是解决非常简单问题的非常迂回的方法。
pmax
无法使用。我认为我仍然会选择ifelse(!is.na(vec1) & !is.na(vec2) & !is.na(vec3), vec3, NA)
而不是选项2,因为它更容易阅读。 - Nick&
更改为i1 <- Reduce('&',!lapply(mget(paste0("vec", 1:3)),is.na)); ifelse(i1,vec3,NA)
。 - akrun