是否可以按意思订购(dplyr 安排?)一个 skim_df 对象?

Is it possible to order (dplyr arrange?) a skim_df object by mean?

我用的是包skimr来汇总数据,都是符合逻辑的,所以自然要按均值从大到小排序。

我已经尝试将脱脂功能通过管道传输到 arrange 用于 dplyr,但那没有用。

我们只是在数据框上使用 skim 函数,这些数据框都是 booleans/logicals。

我试过了,似乎一切都按预期进行。 skim_df 继承自 data.frame,我不明白为什么 dplyr 函数不能对它起作用。

set.seed(123)
df <- data.frame(a = sample(c(T,F), 50, replace = TRUE),
              b = c(rep(F,25), sample(c(T,F), 25, replace = TRUE)),
              c = c(rep(T,25), sample(c(T,F), 25, replace = TRUE)))

sdf <- skimr::skim(df) %>%
     dplyr::filter(stat == "mean") %>% dplyr::arrange(desc(value))

sdf

输出

variable type    stat  level value formatted
  <chr>    <chr>   <chr> <chr> <dbl> <chr>    
1 c        logical mean  .all   0.8  0.8      
2 a        logical mean  .all   0.5  0.5      
3 b        logical mean  .all   0.26 0.26 

我不知道你的问题是什么。仔细检查您的代码是否存在明显错误。

这是 v2 的答案。在 v2 中,略读对象不再是长对象。这里 select() 将 skim 对象变成一个普通的 tibble(focus())会把它保留为 skimr 对象)。

skim(df) %>% dplyr::select(skim_variable, logical.mean) %>% 
             dplyr::arrange(desc(logical.mean)) 
# A tibble: 3 x 2
  skim_variable logical.mean
  <chr>                <dbl>
1 c                     0.7 
2 a                     0.6 
3 b                     0.34

或者

skim(df) %>% skimr::focus(skim_variable, logical.mean) %>% 
             dplyr::arrange(desc(logical.mean)) %>% as.data.frame()

  skim_type skim_variable logical.mean
1   logical             c         0.70
2   logical             a         0.60
3   logical             b         0.34

保留两个元列。 as.data.frame() 是一种不打印摘要的方法,但您也可以告诉它在打印时排除摘要。

skim(df) %>% skimr::focus(skim_variable, logical.mean) %>% 
             dplyr::arrange(desc(logical.mean)) %>% 
             print(include_summary = FALSE)

── Variable type: logical ────────────────────────────────────────────────────────────────
  skim_variable  mean
1 c              0.7 
2 a              0.6 
3 b              0.34