提取所选列中的第一个非NA值。

huangapple go评论101阅读模式
英文:

Extract first not NA value from selected columns

问题

我想从一组列中提取第一个非 NA 值。 "第一个" 的定义是根据列的顺序。 示例:

  1. library(tidyverse)
  2. d1 <- tribble(~a, ~x, ~w, ~z,
  3. "s", NA, 1, 2,
  4. "m", 2, 3, 0,
  5. "k", 9, NA, NA,
  6. "o", NA, NA, 4,
  7. "z", NA, NA, NA)

这是一个不起作用的选项 - 因为它只提取了 2 和 9:

  1. d1 %>%
  2. mutate(want = pmap_int(list(x, w, z), ~.x[!is.na(.x)][1]))

想要的结果是:1, 2, 9, 4, NA

英文:

I would like to extract the first non NA value from a set of columns. "First" is defined by the order of columns. Example:

  1. library(tidyverse)
  2. d1 &lt;- tribble(~a, ~x, ~w, ~z,
  3. &quot;s&quot;, NA, 1, 2,
  4. &quot;m&quot;, 2, 3, 0,
  5. &quot;k&quot;, 9, NA, NA,
  6. &quot;o&quot;, NA, NA, 4,
  7. &quot;z&quot;, NA, NA, NA)

That is a not working option - because it only extracts 2 & 9:

  1. d1 %&gt;%
  2. mutate(want = pmap_int(list(x, w, z), ~.x[!is.na(.x)][1] ))

Want is: 1, 2, 9, 4, NA.

答案1

得分: 3

使用 dplyr::coalesce,您可以这样做:

  1. library(tidyverse)
  2. d1 |&gt;
  3. mutate(want = coalesce(x, w, z))
  4. #&gt; # A tibble: 5 &#215; 5
  5. #&gt; a x w z want
  6. #&gt; &lt;chr&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;
  7. #&gt; 1 s NA 1 2 1
  8. #&gt; 2 m 2 3 0 2
  9. #&gt; 3 k 9 NA NA 9
  10. #&gt; 4 o NA NA 4 4
  11. #&gt; 5 z NA NA NA NA
英文:

Using dplyr::coalesce you could do:

  1. library(tidyverse)
  2. d1 |&gt;
  3. mutate(want = coalesce(x, w, z))
  4. #&gt; # A tibble: 5 &#215; 5
  5. #&gt; a x w z want
  6. #&gt; &lt;chr&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt; &lt;dbl&gt;
  7. #&gt; 1 s NA 1 2 1
  8. #&gt; 2 m 2 3 0 2
  9. #&gt; 3 k 9 NA NA 9
  10. #&gt; 4 o NA NA 4 4
  11. #&gt; 5 z NA NA NA NA

huangapple
  • 本文由 发表于 2023年7月17日 13:53:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/76701795.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定