【问题标题】:Custom Descriptive Statistics Table Export自定义描述性统计表导出
【发布时间】:2019-05-03 12:48:33
【问题描述】:

我花了几周的时间寻找解决我的问题的方法,我不仅要查找而且要创建可导出到 xlsx 的数据的描述性统计汇总表(理想情况下)。我只找到了部分答案,我在 RR 包中的知识仍然足够基本,足以限制我的进步。我的数据集是包含 6 列、50,000 多行的时间序列数据。

我的DF信息:

日期时间:POSIXCT 格式“YYYY-MM-DD HH:MM:SS”

Var1: 数字

Var2: 数字

Var3: 数字

Var4:具有 2 个级别“A”、“B”的因子

Var5:因子 w/ 4 个级别“S1”、“S2”、“S3”、“S4”

我的目标如下:

  1. 使用 tidyverse 操作我的数据框以对我的数据进行子集化

  2. 使用子集数据创建 1 个汇总表(即 tibble 或 data.frame 格式),其中包含 Var1、Var2 和 Var3 的 2 个子因子(Var4 和/或 Var5)。下面是我所针对的表格的一个简化的可视化示例:

  1. 将汇总表(或汇总表,如果无法使用一个表)导出为 xlxs(理想情况下)、.CSV 或 .TXT 以在 Excel 中用于样式表编辑。目前,“writexl”包对我来说效果很好,因为“xlsx”和“openxlsx”包有问题。这是使用 openxlsx 包导出到 xlsx 所需的代码:write_xlsx(dataframe, path = "C:/Users/user/Desktop")。 MacOS 用户请注意,path = /Users/admin/yoursubfolder/yoursubfolder....(在“yoursubfolder”中填写您计算机上的实际文件夹名称)

我做了什么:

  • 使用 dplyr 和 %>% 函数来处理不带和带因子 Var4 或 Var5 的数据
  • 尝试创建一个汇总表,其中 Var4 作为 Var1、Var2 和 Var3 的一个因素(部分成功;样式不是我想要的,或者无法导出到 Excel)
  • 查看了多个 StackOverflow 问题和 Google 搜索,但没有成功找到适用于我的特定案例的代码。我尝试使用 qwraps2 创建一个并查看以下软件包以获取预先制作的内容:psych、stargazer 和 HMSIC。我不喜欢他们的表格样式,他们也不是都可以选择只显示 N、mean、StDev、SEM、Min 和 Max。
  • 我知道 SEM 在大多数软件包中不是标准功能;因此,我从堆栈溢出的答案中借用了这个函数,因为我不知道如何创建函数。这是借来的代码:SEM <- function(x) sd(x)/sqrt(length(x))

由于我无法附加示例数据并且我的编码非常基础,因此我可以提出以下建议:

示例数据:

很遗憾,我无法附上样本数据进行测试。另外由于我对 R 的了解有限,我无法制作出完美的数据框。下面是一个示例数据框,但我无法让因子均匀分布在它们各自的列中(对不起)。这是我的代码:

df <- data.frame(
"DateTime" = seq(c(ISOdate(2018,03,01)), by = "day", length.out = 100),
"Var1" = rnorm(1:100), 
"Var2" = rnorm(1:100), 
"Var3" = rnorm(1:100),
"Var4" = c("A", "B"),
"Var5" = c("S1","S2", "S3", "S4"))

我正在尝试这个:

"S1"[(1:25)],
"S2"[(26:50)], 
"S3"[(51:75)], 
"S4"[(76:100)] # and 
"A"[(1:50], "B"[(51:100)] #but that didn't work, so sorry again.

尽管我缺乏适当的编码,但如果我喜欢 R 和所有该软件的功能,但我觉得非常不方便的是,没有简单、直接的方法可以在控制台中导出表格以复制和粘贴到有用的表格中,如 Excel 电子表格或 Word 文档,而不是标准的 LaTex 格式导出(我不顺便说一句,完全理解)。我知道这个话题已经在不同的论坛中讨论过,其他人也分享了我的观点,即它是多么糟糕,尤其是对于那些需要它来进行数据处理而不是像 Rmarkdown 这样的文档创建的人。

【问题讨论】:

    标签: r export summary


    【解决方案1】:

    你的 df 的一些例子:

    library(dplyr)
    library(tidyr)
    
    SEM_function <- function(x){sd(x)/sqrt(length(x))}
    df %>% as_tibble() %>% 
      gather("Var_num", "value",Var1:Var3) %>% 
      group_by(Var_num, Var4,Var5) %>% 
      summarise("N" = n(), 
              "mean" = mean(value),
              "StDev" = sd(value),
              "SEM" = SEM_function(value) ,
              "min" = min(value),
              "max" = max(value))
    

    希望对你有帮助

    【讨论】:

    • 谢谢@Felipe。您的解决方案非常适合我的真实数据框!在尝试使用 tidyverse 时,我没有正确使用(或不知道如何)使用“收集”功能。我不理解列范围的“键”和“值”部分,因为我只是在引号中写下每个列的名称,这给了我错误消息。此外,具有多个变量和因子的 group_by() 命令是我认为不可能的。再次感谢! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多