生成一个以”±”分隔的描述性统计表。

huangapple go评论97阅读模式
英文:

Produce a descriptive statistics table separated by "±"

问题

I'm new. I need to produce a tibble where each variable grouped by a factor and described by mean and standard deviation separated by "±".

Let's use the iris dataset.

  1. iris %>%
  2. group_by(Species) %>%
  3. summarise(across(everything(), list(Mean=mean,dev.st=sd))) %>%
  4. pivot_longer(cols = -Species, names_to = c(".value", "variable"), names_sep = "_")

How can I continue?
Thank you in advance

英文:

I'm new. I need to produce a tibble where each variable grouped by a factor and described by mean and standard deviation separated by "±".

Let's use the iris dataset.

  1. iris %>%
  2. group_by(Species) %>%
  3. summarise(across(everything(), list(Mean=mean,dev.st=sd))) %>%
  4. pivot_longer(cols = -Species, names_to = c(".value", "variable"), names_sep = "_")

How can I continue?
Thank you in advance

答案1

得分: 2

以下是您要翻译的内容:

  1. You could use the more updated `dplyr::reframe` (which replaces `dplyr::summarize`) and add this combined summary statistic (`comb`) to your list of functions:

library(dplyr)
library(tidyr)

iris %>%
group_by(Species) %>%
reframe(across(everything(),
list(Mean = ~ as.character(mean(.x)),
dev.sd = ~ as.character(sd(.x)),
comb = ~ paste(mean(.x), sd(.x), sep = " ± ")))) %>%
pivot_longer(cols = -Species, names_to = c(".value", "variable"),
names_sep = "_")

(from comment) if you only wanted the combined column and want

them at two significant digits, you could adjust:

iris %>%
group_by(Species) %>%
reframe(across(everything(),
list(comb = ~ paste(sprintf("%.2f", mean(.x)),
sprintf("%.2f", sd(.x)), sep = " ± ")))) %>%
pivot_longer(cols = -Species, names_to = c(".value", "variable"),
names_sep = "_")

#' In this case you get the exact same thing if you replace reframe with
#' summarize, but the latter is being replaced by reframe
#' by dplyr moving forward

  1. Note to combine with the `pivot_longer`, all elements need to be in the same class, so converted them to character. If you keep it wide, you dont have to add the `as.character()` bit in the summary stats.

输出如下:

  1. Species variable Sepal.Length Sepal.Width Petal.Length Petal.Width
  2. <fct> <chr> <chr> <chr> <chr> <chr>
  3. 1 setosa Mean 5.006 3.428 1.462 0.246
  4. 2 setosa dev.sd 0.352489687213451 0.379064369096289 0.173663996480184 0.105385589380046
  5. 3 setosa comb 5.006 ± 0.352489687213451 3.428 ± 0.379064369096289 1.462 ± 0.173663996480184 0.246 ± 0.105385589380046
  6. 4 versicolor Mean 5.936 2.77 4.26 1.326
  7. 5 versicolor dev.sd 0.516171147063863 0.313798323378411 0.469910977239958 0.197752680004544
  8. 6 versicolor comb 5.936 ± 0.516171147063863 2.77 ± 0.313798323378411 4.26 ± 0.469910977239958 1.326 ± 0.197752680004544
  9. 7 virginica Mean 6.588 2.974 5.552 2.026
  10. 8 virginica dev.sd 0.635879593274432 0.322496638172637 0.551894695663983 0.274650055636667
  11. 9 virginica comb 6.588 ± 0.635879593274432 2.974 ± 0.322496638172637 5.552 ± 0.551894695663983 2.026 ± 0.274650055636667
  1. <details>
  2. <summary>英文:</summary>
  3. You could use the more updated `dplyr::reframe` (which replaces `dplyr::summarize`) and add this combined summary statistic (`comb`) to your list of functions:

library(dplyr)
library(tidyr)

iris %>%
group_by(Species) %>%
reframe(across(everything(),
list(Mean = ~ as.character(mean(.x)),
dev.sd = ~ as.character(sd(.x)),
comb = ~ paste(mean(.x), sd(.x), sep = " ± ")))) %>%
pivot_longer(cols = -Species, names_to = c(".value", "variable"),
names_sep = "_")

(from comment) if you only wanted the combined column and want

them at two significant digits, you could adjust:

iris %>%
group_by(Species) %>%
reframe(across(everything(),
list(comb = ~ paste(sprintf("%.2f", mean(.x)),
sprintf("%.2f", sd(.x)), sep = " ± ")))) %>%
pivot_longer(cols = -Species, names_to = c(".value", "variable"),
names_sep = "_")

#' In this case you get the exact same thing if you replace reframe with
#' summarize, but the latter is being replaced by reframe
#' by dplyr moving forward

  1. Note to combine with the `pivot_longer`, all elements need to be in the same class, so converted them to character. If you keep it wide, you dont have to add the `as.character()` bit in the summary stats.
  2. Output

Species variable Sepal.Length Sepal.Width Petal.Length Petal.Width
<fct> <chr> <chr> <chr> <chr> <chr>
1 setosa Mean 5.006 3.428 1.462 0.246
2 setosa dev.sd 0.352489687213451 0.379064369096289 0.173663996480184 0.105385589380046
3 setosa comb 5.006 ± 0.352489687213451 3.428 ± 0.379064369096289 1.462 ± 0.173663996480184 0.246 ± 0.105385589380046
4 versicolor Mean 5.936 2.77 4.26 1.326
5 versicolor dev.sd 0.516171147063863 0.313798323378411 0.469910977239958 0.197752680004544
6 versicolor comb 5.936 ± 0.516171147063863 2.77 ± 0.313798323378411 4.26 ± 0.469910977239958 1.326 ± 0.197752680004544
7 virginica Mean 6.588 2.974 5.552 2.026
8 virginica dev.sd 0.635879593274432 0.322496638172637 0.551894695663983 0.274650055636667
9 virginica comb 6.588 ± 0.635879593274432 2.974 ± 0.322496638172637 5.552 ± 0.551894695663983 2.026 ± 0.274650055636667

  1. </details>

huangapple
  • 本文由 发表于 2023年4月19日 22:17:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/76055595.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定