从 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)
我想从双打列表中提取 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)