使用'dplyr'函数创建的对象在使用write.xlsx时出现R错误

3

我在使用xlsx包中的write.xlsx函数将数据框写入Excel文件时遇到了问题。但是,只有当数据框是使用dplyr包的函数创建时才会出现问题。当我使用基本函数时,就没有问题。以下是一个最小化的示例。

首先是样本数据:

library(dplyr)
library(xlsx)
month <- c('Julio','Diciembre','Diciembre','Agosto','Noviembre',
         'Diciembre', 'Junio','Septiembre','Agosto','Julio')

irrelevant_column <- rep(1,10)

df <- as.data.frame(cbind(irrelevant_column, month)) 

正如我所说,当我使用基本函数时没有问题:
month1  <- table(df$month, df$irrelevant_column)
month1  <- prop.table(month1  , 2)
month1  <- as.data.frame.matrix(month1  )
write.xlsx(month1 ,  file="month1.xlsx")

没有出现错误,但是当我用'dplyr'创建一个类似的数据框时:
month2<- count(df, month)
month2<- mutate(month2, porc = n / sum(month2[, 2]))
month2<- as.data.frame.matrix(month2)
write.xlsx(month2,  file="month2.xlsx")

出现以下错误消息:
Error in .jcall(cell, "V", "setCellValue", value) : 
  method setCellValue with signature ([Ljava/lang/String;)V not found
In addition: Warning message:
In if (is.na(value)) { :
  the condition has length > 1 and only the first element will be used

这个问题有解决方案吗,还是说 xlsx 不兼容 dplyr


4
如果移除 month2<- as.data.frame.matrix(month2),它就能正常工作。 - user3710546
谢谢,那很容易,:) - csmontt
2个回答

2
遇到这个问题后,我使用了as.data.frame()函数将group_by() %>% summarize()的输出结果指定为数据框df,从而解决了问题。

1

我曾经遇到过同样的问题,通过以下方法解决了它

write.xlsx(as.data.frame(dataset), "name.xlsx")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接