嵌套数据的dplyr逻辑隶属度测试

Dplyr logical membership test of nested data

我正在尝试为嵌套列中数据框变量的成员资格创建逻辑测试。使用 mtcars 作为替代,我通常可以复制我正在尝试做的事情(尽管使用的过程可能看起来 inefficient/circuitous 因为它不是我的真实数据):

library(dplyr)
m <- mtcars %>%
  group_by(cyl) %>% 
  summarize(grz = unique(gear)) %>% 
  nest(data = c(cyl))

这会生成与 grz 变量关联的嵌套圆柱列 (data):

# A tibble: 3 x 2
    grz data                
  <dbl> <list>              
1     4 <grouped_df [2 x 1]>
2     3 <grouped_df [3 x 1]>
3     5 <grouped_df [3 x 1]>

我想添加一个列来测试 grz 的值是否存在于嵌套的 data 列中,但似乎无法弄清楚为什么这不起作用:

library(purrr)
m %>% mutate(test = map2_lgl(.x = data, .y = grz, ~ .y %in% .x))

# A tibble: 3 x 3
    grz data                 test 
  <dbl> <list>               <lgl>
1     4 <grouped_df [2 x 1]> FALSE
2     3 <grouped_df [3 x 1]> FALSE
3     5 <grouped_df [3 x 1]> FALSE

grz 的第一行(值为 4)应该产生一个 TRUE 布尔值,而其他两个应该是 FALSE.

我们需要提取列,因为 %in% table 应该是 vectormatrix

library(dplyr)
library(purrr)
m %>%
   mutate(test = map2_lgl(data, grz, ~ .y %in% .x$cyl))

-输出

# A tibble: 3 × 3
    grz data                 test 
  <dbl> <list>               <lgl>
1     4 <grouped_df [2 × 1]> TRUE 
2     3 <grouped_df [3 × 1]> FALSE
3     5 <grouped_df [3 × 1]> FALSE