使用gmodels软件包时如何将表格频率从R导出到excel

使用gmodels软件包时如何将表格频率从R导出到excel,r,export,R,Export,我想知道是否有人知道如何从gmodels包中导出列表频率。我想在excel中将其导出到单独的表格中 例如,我使用下面的代码使用R中的gmodels包生成一个频率表 CrossTable( Merge_dataset$Report_Type,Merge_dataset$name_spill, expected=F, prop.r=T, prop.c=T,prop.t=T, prop.chisq=T) 我想做的是用上面的代码输出这个表,并将

我想知道是否有人知道如何从gmodels包中导出列表频率。我想在excel中将其导出到单独的表格中

例如,我使用下面的代码使用R中的gmodels包生成一个频率表

              CrossTable( Merge_dataset$Report_Type,Merge_dataset$name_spill, expected=F, prop.r=T, 
              prop.c=T,prop.t=T, prop.chisq=T)
我想做的是用上面的代码输出这个表,并将其输出到excel中,但在一个单独的表中。我还有几个其他表格,其中包含不同的变量,我想在同一个excel文件中导出,但不同的表格


谢谢您提供的任何信息。

如果您查看
交叉表的源代码,它会生成一个字符串以输出到控制台,但不会返回一个对象,您可以使用该对象以编程方式捕获表并将其输出到Excel。因此,您需要捕获控制台输出并对其进行解析。以下是您可以如何做到这一点的想法:

require(magrittr)
require(openxlsx)
获取\u交叉\u表格\u单元格%
gsub(“\\Q |\\E”、“\t”、)%>%#用制表符替换垂直条
gsub(“^*”,“,)%>%#删除前导空格
gsub(“\t()*”,“\t”,)%>%#删除每个单元格中的前导空格
gsub(“*\t”、““\t”和“)%>%#删除每个单元格中的尾随空格
提取(!grepl(“--”,)%>%#删除水平线
strsplit(“\t”)->#分割每行中的单元格
行列表
最大宽度%
lappy(函数(z)c(z,rep(“,max_width-length(z)))%>%#使行大小相等
do.call(“rbind”,)%>%#折叠列表
返回
}
现在您需要将此数据保存到Excel。由于将向工作簿中添加不同的工作表,因此您需要编写一个函数,该函数将在现有工作簿中创建一个新的工作表(如果存在),或者在现有工作簿中创建一个新的工作表(如果不存在)

您也可以将
get_cross_table_cells
插入此函数,使其更易于使用。为其提供要跨表的变量、excel文件的路径以及要创建的新工作表的名称:


write_new_cross_表太棒了。非常感谢。是否可以循环此函数以更改每个循环的变量(非常类似于SAS宏,其中代码为常量,但只有变量在循环的每次迭代后更改?)。非常感谢!是的,@Dr.E77。假设您想将
Merge\u dataset
的各个列与
Merge\u dataset$Report\u Type
进行制表。如果要制表的列是,比如说,第二列、第三列和第四列,那么您可以只为(2:4中的i)编写新的交叉表(Merge_dataset$Report_Type,Merge_dataset[[i]],{excel文件的路径在这里},名称(Merge_dataset)[i])
Hi Allan,关于如何指定工作簿路径的快速问题。当我将此作为文件://ART-A_ASPCU1S/ASPCU1/DATA/R dataset的路径输入时,我不断收到预期RPAREN的错误。在上面的函数中是否有我应该遵循的文件命名约定?谢谢@E77博士尝试
write_new_cross_table(Merge_dataset$Report_Type,Merge_dataset[[i]],“//ART-A_ASPCU1S/ASPCU1/DATA/R datasets/my_workbook.xlsx”,name(Merge_dataset)[i])
“他仍然犯了一个错误。它不喜欢文件名约定,而且,我忘了提到它在这里带来了一个不匹配的开头括号错误:write_new_cross_table