使用dplyr创建通用描述符表
我正在尝试创建一个简单的代码,可以反复使用(只需进行最小的调整),以便能够打印汇总统计表 一个可再现的示例创建了一个表,其中包含按组细分的变量使用dplyr创建通用描述符表,r,dplyr,summary,R,Dplyr,Summary,我正在尝试创建一个简单的代码,可以反复使用(只需进行最小的调整),以便能够打印汇总统计表 一个可再现的示例创建了一个表,其中包含按组细分的变量V1: 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 %>% grou
V1
:
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
然后很快地选择我想要汇总统计数据的列
我的愿望清单上有几件事:
给定变量的M和SD应该紧挨着,我想在每一对上面添加一列,并使用变量名
我希望最终产品看起来像
我想使用dplyr,但我对其他选项持开放态度。
我还想了解如何切换表中的行和列,以便变量位于单独的行上,每组有一列(或两列,一列用于M,一列用于SD)。排序有限制,但如果使用
选择
,则可以对列名上的子字符串重新排序
library(dplyr)
library(stringr)
data %>%
group_by(Group) %>%
summarise_at(vars(vars), list(Mean = mean, SD = sd)) %>%
select(Group, order(str_remove(names(.)[-1], "_.*")) + 1)
# A tibble: 2 x 5
# Group V1_Mean V1_SD V2_Mean V2_SD
# <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 0.165 0.915 0.146 1.16
#2 2 0.308 1.31 -0.00711 0.854
库(dplyr)
图书馆(stringr)
数据%>%
分组依据(分组)%>%
总结(变量,列表(平均值=平均值,标准差=标准差))%>%
选择(组、顺序(str_-remove(名称(.)[-1],“.*))+1)
#一个tibble:2x5
#组V1_平均值V1_SD V2_平均值V2_SD
#
#1 1 0.165 0.915 0.146 1.16
#2 2 0.308 1.31 -0.00711 0.854
排序有限制,但如果使用选择
,则可以在列名的子字符串上重新排序
library(dplyr)
library(stringr)
data %>%
group_by(Group) %>%
summarise_at(vars(vars), list(Mean = mean, SD = sd)) %>%
select(Group, order(str_remove(names(.)[-1], "_.*")) + 1)
# A tibble: 2 x 5
# Group V1_Mean V1_SD V2_Mean V2_SD
# <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 0.165 0.915 0.146 1.16
#2 2 0.308 1.31 -0.00711 0.854
库(dplyr)
图书馆(stringr)
数据%>%
分组依据(分组)%>%
总结(变量,列表(平均值=平均值,标准差=标准差))%>%
选择(组、顺序(str_-remove(名称(.)[-1],“.*))+1)
#一个tibble:2x5
#组V1_平均值V1_SD V2_平均值V2_SD
#
#1 1 0.165 0.915 0.146 1.16
#2 2 0.308 1.31 -0.00711 0.854
您可以使用data%>%group\u by(group)%>%summary\u at(vars(vars),list(Mean=Mean,SD=SD))
可能重复@iod,但这不会将每个变量的M和SD列放在相邻的位置。然后我必须重新排列所有变量。你知道有什么更快的方法吗?@akrun这也不会将M和SD列放在每个变量的旁边。然后我必须重新排列所有变量。我并不反对,但当我有几百个变量时,我需要一种方法来更快地重新排列它们,并添加带有变量名的标题。你可以使用data%>%group\u by(group)%%>%summary\u at(vars(vars),list(Mean=Mean,SD=SD))
可能重复@iod,但这不会将m和SD列放在每个变量的旁边。然后我必须重新排列所有变量。你知道有什么更快的方法吗?@akrun这也不会将M和SD列放在每个变量的旁边。然后我必须重新排列所有变量。我并不反对,但当我有几百个变量时,我需要一种方法来更快地重新排列它们,并添加带有变量名的标题。