从 R 中的双精度列表中提取 5 的最小倍数

Extract minimum multiple of 5 from a list of doubles in R

我想从双打列表中提取 5 的最小倍数。这是一个示例数据框:

library(tidyverse)

z <- tribble(
  ~x,
  c(65, 80, 101),
  c(70, 66, 92),
  c(65, 42, 84),
  c(30, 70, 101),
  c(82, 66, 55)
)

理想情况下,输出将是一个新列,其中包含每个列表中的最小奇数:

# A tibble: 5 x 2
  x             y
  <list>    <dbl>
1 <dbl [3]>    65
2 <dbl [3]>    70
3 <dbl [3]>    65
4 <dbl [3]>    30
5 <dbl [3]>    55

这里有一个添加5的最小倍数的方法:

z$y <- vapply(z$x, function(e) min(e[e %% 5 == 0]), numeric(1))


# A tibble: 5 x 2
  x             y
  <list>    <dbl>
1 <dbl [3]>    65
2 <dbl [3]>    70
3 <dbl [3]>    65
4 <dbl [3]>    30
5 <dbl [3]>    55

您可以使用 purrr 中的 map,将函数应用于每个嵌套的 tibble。我认为这应该有效:

library(purrr)
z %>% mutate(y=map_dbl(x,~min(.x[.x %% 5==0])))
# A tibble: 5 x 2
  x             y
  <list>    <dbl>
1 <dbl [3]>    65
2 <dbl [3]>    70
3 <dbl [3]>    65
4 <dbl [3]>    30
5 <dbl [3]>    55

或者单独使用 map,你取消嵌套 y:

z %>% mutate(y=map(x,~min(.x[.x %% 5==0]))) %>% unnest(y)