使用R中的XLSX包在Excel中打印data.frame时出错

数据框可见,没有任何错误。 但是当使用包XLSX的write.xlsx函数打印时,会出现错误。

Error in .jcall(cell, "V", "setCellValue", value) : method setCellValue with signature ([D)V not found. 

data.frame的dput看起来像:

 Timestamp qs pqs logqs es p_imp dep r_dep agg_rtn (time) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 1 2015-05-04 09:29:59 0.05788732 0.0007478696 0.0007478545 0.09633803 -0.0446830986 3533.518 274079.9 -0.0006432937 2 2015-05-04 10:00:00 0.04948394 0.0006362707 0.0006362707 0.07586009 0.0088016055 2416.431 187953.1 0.0000000000 3 2015-05-04 10:30:00 0.05554795 0.0007142532 0.0007142532 0.06417808 -0.0002739726 3245.574 252422.0 0.0000000000 4 2015-05-04 10:59:59 0.04863014 0.0006194244 0.0006194244 0.08434442 0.0024951076 3563.401 279503.9 0.0000000000 5 2015-05-04 11:30:00 0.05761986 0.0007319037 0.0007319037 0.07851027 0.0154965753 2010.943 158429.1 -0.0006339144 6 2015-05-04 12:00:00 0.04957627 0.0006285051 0.0006285051 0.07025424 0.0070762712 1819.908 143546.0 0.0000000000 Variables not shown: vol_30_sum (dbl), vol_30_mean (dbl), p_return_sqr (dbl), p_return_mean (dbl), Lim_or_out (dbl), closing_price (dbl), closing_vol (dbl) 

请帮助解决这个错误。

仍然没有可重现的例子,但是从你的class(q1)看来, q1是一个tbl_dfdplyr包生成的dataframe的dplyr ),而write.xlsx需要一个data.frame

按照预期的方式尝试给write.xlsx一个普通的data.frame 。 例如

 write.xlsx(as.data.frame(q1), ...) 

这里有一个可重复的例子 (即你可以复制粘贴到你的R会话重现错误+修复)。

 library(dplyr) iris2 <- tbl_df(iris) class(iris2) # like yours # [1] "tbl_df" "tbl" "data.frame" # Now let's try to write to XLSX using command as mentioned in your comments library(xlsx) write.xlsx(iris2, file='test.xlsx', sheetName="Sheet1", col.names=TRUE, row.names=FALSE, append=TRUE) # Error in .jcall(cell, "V", "setCellValue", value) : # method setCellValue with signature ([D)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 # ^--- we can reproduce your error. This is the point of a reproducible example, so we can see if our fixes work for you. 

现在让我们尝试修复它,确保write.xlsx获取data.frame,而不是tbl_df!

 write.xlsx(as.data.frame(iris2), file='test.xlsx', sheetName="Sheet1", col.names=TRUE, row.names=FALSE, append=TRUE) # huzzah! 

似乎有一个与第一列(时间戳)的date/时间格式的错误。 如果您将第一列转换为字符,它应该工作。 所以,你可以改变你的第一列

 q1[,1] <- as.character(q1[,1]) 

然后再试一次…