Ошибка при печати data.frame в excel с использованием пакета XLSX в R

Снимки данных видны без какой-либо ошибки. Но когда то же самое печатается с использованием функции write.xlsx пакета XLSX, он дает ошибку.

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

Объем данных в кадре данных выглядит следующим образом:

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)

Просьба помочь в разрешении этой ошибки.

Ответ 1

Все еще не воспроизводимый пример, но из вашего class(q1) кажется, что q1 - это tbl_df (тип данных, который создается пакетом 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 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!

Ответ 2

Кажется, что есть ошибка с форматом Date/Time первого столбца (Timestamp). Если вы конвертируете первый столбец в символ, он должен работать. Итак, вы можете изменить свой первый столбец на

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

и повторите попытку...

Ответ 3

Я считаю, что это происходит при группировке переменных с dplyr. Если вы закончите цепочку с% > % ungroup(), она решит