【问题标题】:R: how to use writexl when data frame contains strings and numbersR:当数据帧包含字符串和数字时如何使用writexl
【发布时间】:2019-06-25 21:14:03
【问题描述】:

我是 R 新手,我正在尝试将数据保存到 xlsx 文件。我正在使用 writexl(xlsx 引起了麻烦)。

当我尝试使用 write_xlsx 时,似乎在我的数据框中包含字符串和整数会导致问题。

我在这里重现了这个问题:

library(writexl)

matrix <- matrix(1,2,2)
block <- cbind(list("ones","more ones"),matrix)
df <- data.frame(block)

data = list("sheet1"=df)

write_xlsx(data, path = "data.xlsx", col_names = FALSE, format_headers = FALSE)

文件 data.xlsx 正确包含“sheet1”,但它是空白的。我愿意

一个 1 1

更多 1 1

有什么方法可以使用 write_xlsx 获得此输出?

【问题讨论】:

  • 问题更可能是您正在创建格式错误的数据框。您是否知道df 中的每一列实际上是一个列表,而不是一个向量?实际上,即使您的矩阵也是列表矩阵。试试df &lt;- data.frame(a = c("ones","more ones"),b = c(1,1),c = c(1,1))。尝试使用 matrixcbindrbind 而不是仅使用 data.frame 创建数据框可能会出错。
  • 好的,很高兴知道。是否有一种可接受的方式将现有矩阵和列表合并到数据框中,还是我必须逐个列表构建它? (我也有一个列名列表,因此将所有内容分开以重新构建它会有点不方便。)
  • 好吧,除非数据类型实际上不同,否则避免使用列表会更安全。如果你有列名,这些都是字符,真的没有理由使用list() 而不仅仅是c()。但是,如果您要使用 cbindrbind 构建数据帧,则需要始终检查您是否得到了您的想法,而永远不要假设 R 会神奇地将所有内容强制转换为您天真的假设。

标签: r writexl


【解决方案1】:

我通常使用openxlsx 包。尝试修改以下代码:

library(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "Sheet1")
writeData(wb, "Sheet1", df, colNames = FALSE)
saveWorkbook(wb, "test.xlsx", overwrite = TRUE)

【讨论】:

    【解决方案2】:

    我会在包的 github 存储库上提出一个问题:https://github.com/ropensci/writexl/issues

    这样做:

    df <- data.frame(
      X1 = c("ones", "more ones"),
      X2 = c(1, 1),
      X3 = c(1, 1)
    )
    
    write_xlsx(df, path = "data.xlsx", col_names = FALSE, format_headers = FALSE)
    

    工作正常。我会说这是因为您的代码中的df 有列表列:

    > str(df)
    'data.frame':   2 obs. of  3 variables:
     $ X1:List of 2
      ..$ : chr "ones"
      ..$ : chr "more ones"
     $ X2:List of 2
      ..$ : num 1
      ..$ : num 1
     $ X3:List of 2
      ..$ : num 1
      ..$ : num 1
    

    不确定该软件包是否具有此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2022-01-25
      • 1970-01-01
      • 2011-05-29
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多