显示每列的唯一值

ale*_*523 4 r dplyr purrr

我正在尝试为每列创建一个列类型和唯一变量的数据框。

我能够使用 获得所需数据帧格式的列类型map(df, class) %>% bind_rows() %>% gather(key = col_name, value = col_class),但无法使唯一变量成为数据帧而不是列表。

下面是一个小数据框和代码,用于获取列表中的唯一变量,但不是数据框。理想情况下,我可以在一个(地图)函数中执行此操作,但是如果我必须加入它们,那也没什么大不了的。


df <- data.frame(v1 = c(1,2,3,2), v2 = c("a","a","b","b"))

library(tidyverse)

map(df, class) %>% bind_rows() %>% gather(key = col_name, value = col_class)

map(df, unique)
Run Code Online (Sandbox Code Playgroud)

当我尝试用同样的方法在map(df, unique)作为上map(df, class)我得到以下错误:Error: Argument 2 must be length 3, not 2预计,但我不知道怎么去解决它。

yif*_*yan 7

这两列中唯一值的数量不同。您需要将它们缩减为单个元素。

df2 <- map(df, ~str_c(unique(.x),collapse = ",")) %>% 
    bind_rows() %>% 
    gather(key = col_name, value = col_unique)
Run Code Online (Sandbox Code Playgroud)
> df2
# A tibble: 2 x 2
  col_name col_class
  <chr>    <chr>    
1 v1       1,2,3    
2 v2       a,b   
Run Code Online (Sandbox Code Playgroud)