Ошибка при печати 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(), она решит