首页 > 解决方案 > 如何基于过滤R中的所有其他变量返回一列的所有唯一值

问题描述

我有一个包含变量groupX1:X1000. 对于每一列,X1:X1000我只想过滤具有0值的行,然后返回group过滤数据集中变量的唯一值。如果是单列,它将类似于:

df %>% filter(X1 == 0) %>% select(group) %>% unique()

由于我希望每一列都有这个,我认为也许map可以以某种方式使用它来返回group相对于 columns的唯一值列表X1:X1000,但无法弄清楚调用应该是什么样子。

标签: rdplyrpurrr

解决方案


我们可以使用map循环列名filter_at的字符串,指定字符串名称,过滤行,select“组”并获取distinct元素

library(tidyverse)
map(paste0("X", 1:1000), ~
                df %>% 
                    filter_at(vars(.x), all_vars(.==0)) %>% 
                    select(group) %>% 
                    distinct
                  )

或者代替filter_at,可以将字符串转换为符号 ( sym) 并在内部计算 ( !!)filter

map(paste0("X", 1:1000), ~
                    df %>%
                        filter(!! (rlang::sym(.x)) ==0) %>%
                        select(group) %>%
                        distinct
              )  

推荐阅读