【发布时间】:2020-11-28 00:29:56
【问题描述】:
我有一个大型数据框,我使用psych 库中的describeBy 以多种方式汇总如下:
library(tidyverse)
library(openxlsx)
library(psych)
.
.
.
# Describe by Region
lst1 <- describeBy(df[QUESTIONS], df[REGION_DESCRIPTOR])
# Describe by Doctor
lst2 <- describeBy(df[QUESTIONS], df[CARE_DESCRIPTOR])
然后我创建一个新工作簿
wb = createWorkbook()
并开始尝试将 lst1、lst2、.... 写入其中,每个工作表一个项目:
addWorksheet(wb, REGION_DESCRIPTOR)
writeData(wb, REGION_DESCRIPTOR, lst1)
addWorksheet(wb, CARE_DESCRIPTOR)
writeData(wb, CARE_DESCRIPTOR, lst2)
很遗憾,我收到一条错误消息:
Error in as.data.frame.default(x, stringsAsFactors = FALSE) :
cannot coerce class ‘c("psych", "describeBy")’ to a data.frame
如何使用openxlsx 将每个describeBy 对象写入工作表?我尝试过使用writexl,虽然它有效,但我不满意它将describeBy 生成的每个摘要写入不同的工作表。由于我有近十几个 describeBy,每个都有 3-5 个类别,这很快就会变得笨拙。
提前感谢您的帮助
托马斯·飞利浦
【问题讨论】:
-
您能否将
dput(df)的输出粘贴到问题中以帮助您! -
你可以试试
do.call(rbind, describeBy(mtcars[, 'mpg'], mtcars[, 'vs']) ) -
在尝试编写/保存之前,尝试将数据结构从“psych”和“describeBy”更改为更标准的东西,例如数据框。
-
dput(lst1) 的输出太长,无法打印,但开始和结束是这样的:
> dput(lst1) structure(list(ASIA_HIGH_INCOME = structure(list(vars = 1:17, n = c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), ..., row.names = c("Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", "Q12", "Q13", "Q14", "Q15", "Q16", "Q17"))), .Dim = 10L, .Dimnames = list( Region = c("ASIA_HIGH_INCOME", "ASIA_MIDDLE_INCOME", ..., "WESTERN_EUROPE")), call = by.data.frame(data = x, INDICES = group, FUN = describe, type = type), class = c("psych", "describeBy"))