Dplyr嵌套数据逻辑成员测试:判断grz值是否存在于嵌套data列
问题原因
你当前代码返回全FALSE的核心原因是:map2中传入的.x是嵌套的tibble对象,你直接判断数值是否存在于数据框对象中,而没有提取数据框内的列向量进行成员关系校验,自然无法匹配到对应值。
解决代码
只需要在匿名函数中提取嵌套数据框内的cyl列再做判断即可,示例如下:
library(dplyr) library(purrr) # 原始数据构造逻辑不变 m <- mtcars %>% group_by(cyl) %>% summarize(grz = unique(gear)) %>% nest(data = c(cyl)) # 修正后的成员校验逻辑 m %>% mutate(test = map2_lgl( .x = data, .y = 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
补充说明
如果嵌套列内的字段名不固定,也可以用unlist把嵌套数据框的所有值转为向量后再判断,写法更通用:
m %>% mutate(test = map2_lgl(data, grz, ~ .y %in% unlist(.x)))
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

