【问题标题】:Is it possible to order (dplyr arrange?) a skim_df object by mean?是否可以通过平均方式订购(dplyr 排列?)skim_df 对象?
【发布时间】:2019-10-25 14:55:16
【问题描述】:

我正在使用包skimr来汇总所有逻辑数据,所以我自然想按平均从大到小对结果进行排序。

我已经尝试将 dplyr 的skim 函数通过管道传递给arrange,但这没有用。

我们只是在所有布尔值/逻辑值的数据帧上使用skim 函数。

【问题讨论】:

  • 您能否分享您的数据/代码示例,以便我们测试可能的解决方案?

标签: r skimr


【解决方案1】:

我试过了,似乎一切都按预期工作。 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 

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

【讨论】:

  • 哇,我没有为stat == mean 使用过滤器阶段,非常感谢!
  • 仅供参考,这将随着即将发布的 skimr v2 的发布而改变。它没有长结构,尽管 to_long 可能仍然可以使用它。
【解决方案2】:

这是 v2 的答案。在 v2 中,skim 对象不再是 long 对象。这里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

【讨论】:

    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多