【发布时间】:2019-10-25 14:55:16
【问题描述】:
我正在使用包skimr来汇总所有逻辑数据,所以我自然想按平均从大到小对结果进行排序。
我已经尝试将 dplyr 的skim 函数通过管道传递给arrange,但这没有用。
我们只是在所有布尔值/逻辑值的数据帧上使用skim 函数。
【问题讨论】:
-
您能否分享您的数据/代码示例,以便我们测试可能的解决方案?
我正在使用包skimr来汇总所有逻辑数据,所以我自然想按平均从大到小对结果进行排序。
我已经尝试将 dplyr 的skim 函数通过管道传递给arrange,但这没有用。
我们只是在所有布尔值/逻辑值的数据帧上使用skim 函数。
【问题讨论】:
我试过了,似乎一切都按预期工作。 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 使用过滤器阶段,非常感谢!
这是 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
【讨论】: