dplyr::summarise 的排序输出

wat*_*wer 1 sorting r stata dplyr

我的数据如下所示:

(sassign是保存数据的data.frame)

head(sassign %>% select(child,youth,cook,do_it))
  child youth cook do_it
1     3     2    2     0
2     0     1    0     1
3     0     0    2     0
4     0     0    0     0
5     0     0    1     0
6     0     1    0     0
Run Code Online (Sandbox Code Playgroud)

我的目标是找到购买儿童书籍、青少年书籍、烹饪书籍和动手书籍的总人数。

所以,这就是我所做的:

sassign %>%  summarise( sumchild=sum(child),sumyouth=sum(youth),sumcook=sum(cook),sumdo_it=sum(do_it)) 
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

  sumchild sumyouth sumcook sumdo_it
1    42723    19549   46830    23153
Run Code Online (Sandbox Code Playgroud)

问题 1:: 这解决了我的目的,但是我是否可以获得按列排序的输出?这是我从 Stata 得到的:

    --------------------------------------------------------------
    | Total Std. Err. [95% Conf. Interval]
    -------------+------------------------------------------------
    cook | 46830 265.0706 46310.46 47349.54 
   child | 42723 250.4739 42232.07 43213.93
    do_it | 23153 171.2552 22817.34 23488.66
    youth | 19549 152.7226 19249.66 19848.34
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,STATA 输出从上到下很好地排序。

问题 2:: 我是否还可以像 STATA 显示的那样包含 SD 和 CI?

问题 3::我是否可以在 SD 或 CI 上排序而不是在 R 中排序?我查看了描述函数,但不确定,所以我想在这里问他们。

我正在从 Stata 过渡到 R,因此我将非常感谢我能得到的任何帮助。我还浏览了 SO 上的其他帖子,但大多数都涉及使用 group_by 时的排序。

谢谢

Psi*_*dom 5

您可以使用lapply循环数据,计算统计数据,将它们放入数据框中,然后重新绑定它们,排序部分可以使用以下函数arrange完成dplyr

library(dplyr)
do.call(rbind, lapply(df, function(col) { 
    t.result = t.test(col); 
    data.frame(SUM = sum(col), SD = sd(col), 
               CIL = t.result$conf.int[1], CIH = t.result$conf.int[2]) })) %>% 
    add_rownames(var = "CAT") %>% arrange(desc(SUM))

# Source: local data frame [4 x 5]

#     CAT   SUM        SD        CIL      CIH
#   <chr> <int>     <dbl>      <dbl>    <dbl>
# 1  cook     5 0.9831921 -0.1984635 1.865130
# 2 youth     4 0.8164966 -0.1901939 1.523527
# 3 child     3 1.2247449 -0.7852909 1.785291
# 4  doit     1 0.4082483 -0.2617636 0.595097
Run Code Online (Sandbox Code Playgroud)