如何从指定列中按顺序提取首个非NA值(R语言tidyverse)
解决按列顺序提取首个非NA值的问题
你的代码出错的核心原因是:pmap_int里的.x仅对应list(x,w,z)中的第一个元素(也就是x列),并没有把x、w、z整合成当前行的向量来处理,所以只会从x列筛选非NA值,自然得不到正确结果。
下面给你两种可行的解法:
方法1:用coalesce函数(最简洁)
dplyr的coalesce函数就是专门用来按参数顺序返回第一个非NA值的,完全匹配你的##### s一粒粒e尾解法报考:华CE德纳rammar这里应该是需求
d1 %>% mutate(want = coalesce(x, w, z))
运行后want列就是你期望的结果:1, 2, 9, 4, NA
方法2:修正pmap的写法
如果想用pmap系列函数,需要把每一行的x、w、z打包成向量,再筛选首个非NA值:
d1 %>% mutate(want = pmap_dbl(list(x, w, z), ~ { row_vec <- c(...) row_vec[!is.na(row_vec)][1] }))
这里用pmap_dbl是因为结果包含NA(pmap_int无法处理NA),如果需要整数类型,可以后续用as.integer()转换。
内容的提问来源于stack exchange,提问作者r.user.05apr
相关产品推荐
相关产品推荐

