【问题标题】:CrossTable output to excel in R交叉表输出到 R 中的 excel
【发布时间】:2017-12-07 17:50:35
【问题描述】:

在生成列联表时,我在 R 中使用函数 CrossTable,因为它是我设法找到的信息量最大且最灵活的函数,它可以立即为您提供很多东西,而无需单独计算. 但是,它生成的输出是文本输出,主要针对 R 中的控制台。这对我来说是一个大问题,因为我依靠输出这些类型的表格来在下一步分析中表现出色。

有什么方法可以将CrossTable 输出到 Excel 电子表格,以便每个数字都在自己的单元格中? (即,不是完全进入单个单元格的文本)(“文本到列”没有帮助)

【问题讨论】:

  • 您好,请注明CrossTable所属的包。您尝试实现的目标的可重现示例会很棒。
  • 对不起,我忘记了。包裹是gmodels。不需要可重复的示例,因为我询问它给出的任何输出。我想要的只是能够以一种允许我稍后编辑它的方式将其输出到 Excel,而不是将信息作为文本粘贴到 Excel 中(然后将所有信息放在一个单元格中)
  • @Corel 如果您使用的是 RStudio,您可以使用 View(),然后只需从 RStudio 视图窗口复制粘贴输出
  • @MikolajM View() 与 CrossTable 一起使用时没有给我任何东西。它只是打开一个空白选项卡。 CrossTable 基本上会在控制台中以漂亮的格式返回一个列表。

标签: r excel contingency


【解决方案1】:
# obtaining data
library('gmodels')
data(infert, package = "datasets")
# asign the result to object
d <- CrossTable(infert$education, infert$induced, expected = TRUE)
# now you can use d object to build something you could save using
# `write.table` to csv or directly to xlsx by other methods

# use str(d) to study structure of returned object
str(d)

【讨论】:

    【解决方案2】:

    我编写了一个将交叉表转换为 excel 文件的函数。也许它对其他人也有用:

    #writes output from gmodels::CrossTable to an excel file
    #package "xlsx" should be installed
    crossExcel <- function(Cross.Table, file, chi=F) {  
      Cross.Table <- x
      
      t <- reshape(as.data.frame(Cross.Table[["t"]]), idvar="x", timevar="y", direction="wide")
      row <- reshape(as.data.frame(Cross.Table[["prop.row"]]), idvar="x", timevar="y", direction="wide")
      col <- reshape(as.data.frame(Cross.Table[["prop.col"]]), idvar="x", timevar="y", direction="wide")
      tbl <- reshape(as.data.frame(Cross.Table[["prop.tbl"]]), idvar="x", timevar="y", direction="wide")
      
      xlsx::write.xlsx(t, file=file, sheetName="t", row.names=F)
      xlsx::write.xlsx(row, file=file, sheetName="prop.row", append=T, row.names=F)
      xlsx::write.xlsx(col, file=file, sheetName="prop.col", append=T, row.names=F)
      xlsx::write.xlsx(tbl, file=file, sheetName="prop.tbl", append=T, row.names=F)
      
      if (chi==T) {
        exp <- as.data.frame(x[["chisq"]][["expected"]])
        xlsx::write.xlsx(exp, file=file, sheetName="exp", append=T, row.names=T)
        
        t <- t[ ,2:3]
        chip <- ((exp-t)*(exp-t))/exp
        xlsx::write.xlsx(chip, file=file, sheetName="prop.chisq", append=T, row.names=T)
      }
      
      print(paste0("CrossTable exported to ", getwd() ,file))
    }
    

    使用示例:

    data(infert, package = "datasets") #obtaining exapmle data
    x <- gmodels::CrossTable(infert$education, infert$induced) 
    crossExcel(x, "output.xlsx")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多