是否可以按意思订购(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
我用的是包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