Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr创建通用描述符表_R_Dplyr_Summary - Fatal编程技术网

使用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列放在每个变量的旁边。然后我必须重新排列所有变量。我并不反对,但当我有几百个变量时,我需要一种方法来更快地重新排列它们,并添加带有变量名的标题。