小编soc*_*her的帖子

使用 dplyr 创建多功能描述表

我正在尝试创建一个简单的代码,我可以一遍又一遍地重用(进行最少的调整),以便能够打印汇总统计表。

一个可重现的示例为V1按组分解的变量创建了一个包含 M 和 SD 的表:

data <- as.data.frame(cbind(1:100, sample(1:2), rnorm(100), rnorm(100)))
names(data) <- c("ID", "Group", "V1", "V2")


library(dplyr)
descriptives <- data %>% group_by(Group) %>%
  summarize(
    Mean = mean(V2)
    , SD = sd(V2)
  )

descriptives
Run Code Online (Sandbox Code Playgroud)

我想修改这个函数,以便它为我的数据集中的所有变量计算 M 和 SD。

我希望能够将调用替换为V1类似vars数据集中所有变量的列表;在这个例子中,V1 和 V2。但通常我有 100 个变量。我希望它以这种方式工作的原因是,我可以做一些非常简单的事情,例如:

vars <- names(data[3:4])
Run Code Online (Sandbox Code Playgroud)

并非常快速地选择我想要汇总统计的列。

我的愿望清单有几件事:

给定变量的 M 和 SD 应该彼此相邻,我想在每对上方添加一个带有变量名称的列。

我希望最终产品看起来像

这个例子表

我想使用 dplyr,但我愿意接受其他选择。我还想了解如何切换表的行和列,以便变量位于不同的行上,并且每个组都有一列(或两列,一列用于 M,另一列用于 SD)。像这样: 另一个示例表

关闭,但没有雪茄:

  1. newish summarise(across()) 有助于:
dplyr::group_by(df, Group) %>% 
  dplyr::summarise(dplyr::across(.cols = c(V1, V2), .fns = c(mean, sd))) …
Run Code Online (Sandbox Code Playgroud)

r summary dplyr

4
推荐指数
2
解决办法
323
查看次数

ggplot 用水平平均线分割小提琴图

我使用 ggplot 创建了这些半小提琴图。但是,我不想包含显示中位数的箱线图,而是包含一条带有平均值的水平线。这意味着每个彩色一半都有自己的平均线:金色一半的平均线不会与灰色一半的平均线完全对齐。重要的是,我希望平均线仅位于密度图中。我怎样才能实现这个目标?我无法弄清楚,我将不胜感激任何帮助!

以下是一些示例数据:

set.seed(20160229)

my_data = data.frame(
  y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 
1.5)),
  x=c(rep('a', 2000), rep('b', 2000)),
  m=c(rep('i', 1000), rep('j', 2000), rep('i', 1000))
)
Run Code Online (Sandbox Code Playgroud)

这是 geom_violin 的扩展,用于创建 split_geom_violin:

GeomSplitViolin <- ggproto("GeomSplitViolin", GeomViolin, draw_group = function(self, data, ..., draw_quantiles = NULL){
  data <- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x))
  grp <- data[1,'group']
  newdata <- plyr::arrange(transform(data, x = if(grp%%2==1) xminv else xmaxv), if(grp%%2==1) y else -y)
  newdata …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 violin-plot

1
推荐指数
1
解决办法
6892
查看次数

标签 统计

r ×2

dplyr ×1

ggplot2 ×1

summary ×1

violin-plot ×1