How to handle "write.xlsx" error: arguments imply differing number of rows
How to handle "write.xlsx" error: arguments imply differing number of rows
我正在尝试从我创建的数据帧列表中编写一个 xlsx 文件,但由于缺少数据而出现错误(我无法下载)。除了缺少数据之外,我只想编写 xlsx 文件。感谢任何帮助。
对于问题的复制:
library(quantmod)
name_of_symbols <- c("AKER","YECO","SNOA")
research_dates <- c("2018-11-19","2018-11-19","2018-11-14")
my_symbols_df <- lapply(name_of_symbols, function(x) tryCatch(getSymbols(x, auto.assign = FALSE),error = function(e) { }))
my_stocks_OHLCV <- list()
for (i in 1:3) {
trade_date <- paste(as.Date(research_dates[i]))
OHLCV_data <- my_symbols_df[[i]][trade_date]
my_stocks_OHLCV[[i]] <- data.frame(OHLCV_data)
}
您可以在 my_stocks_OHLCV[[2]]
中看到丢失的数据以及我得到的 write.xlsx
错误:
print(my_stocks_OHLCV)
[[1]]
AKER.Open AKER.High AKER.Low AKER.Close AKER.Volume AKER.Adjusted
2018-11-19 2.67 3.2 1.56 1.75 15385800 1.75
[[2]]
data frame with 0 columns and 0 rows
[[3]]
SNOA.Open SNOA.High SNOA.Low SNOA.Close SNOA.Volume SNOA.Adjusted
2018-11-14 1.1 1.14 1.01 1.1 107900 1.1
write.xlsx(my_stocks_OHLCV, "C:/Users/MICRO/Downloads/Datasets_stocks/dux_OHLCV.xlsx")
Error in (function (..., row.names = NULL, check.rows = FALSE,
check.names = TRUE,:arguments imply differing number of rows: 1, 0
如何 运行 write.xlsx 即使我有这些缺失数据?
你需要问的主要问题是,你想要什么?
当您处理股票数据时,最好的办法是,如果您没有股票数据,则将其删除。这样的东西应该可以工作,
my_stocks_OHLCV[lapply(my_stocks_OHLCV,nrow)>0]
如果你想要整行 NA
或 0
然后使用 lapply
函数,对于列表中长度为 0 的每个元素,替换为 NA
、0 向量 (c(0,0,0,0,0,0)
) 等...
像这样,
condition <- !lapply(my_stocks_OHLCV,nrow)>0
my_stocks_OHLCV[condition] <- data.frame(rep(NA,6))
这里我们定义了条件变量,即列表中没有任何数据的元素。然后我们可以将它们替换为 NA
或将 NA
替换为 0
。但是,我想不出这样做的理由。
你的问题的一个变体,也是你可以在 for 循环中处理的一个变体,是检查你是否有数据,如果没有,用 NA
s 替换那里的值,并且你可以给它正确的 headers,因为你知道它与哪只股票有关。
希望对您有所帮助。
我正在尝试从我创建的数据帧列表中编写一个 xlsx 文件,但由于缺少数据而出现错误(我无法下载)。除了缺少数据之外,我只想编写 xlsx 文件。感谢任何帮助。
对于问题的复制:
library(quantmod)
name_of_symbols <- c("AKER","YECO","SNOA")
research_dates <- c("2018-11-19","2018-11-19","2018-11-14")
my_symbols_df <- lapply(name_of_symbols, function(x) tryCatch(getSymbols(x, auto.assign = FALSE),error = function(e) { }))
my_stocks_OHLCV <- list()
for (i in 1:3) {
trade_date <- paste(as.Date(research_dates[i]))
OHLCV_data <- my_symbols_df[[i]][trade_date]
my_stocks_OHLCV[[i]] <- data.frame(OHLCV_data)
}
您可以在 my_stocks_OHLCV[[2]]
中看到丢失的数据以及我得到的 write.xlsx
错误:
print(my_stocks_OHLCV)
[[1]]
AKER.Open AKER.High AKER.Low AKER.Close AKER.Volume AKER.Adjusted
2018-11-19 2.67 3.2 1.56 1.75 15385800 1.75
[[2]]
data frame with 0 columns and 0 rows
[[3]]
SNOA.Open SNOA.High SNOA.Low SNOA.Close SNOA.Volume SNOA.Adjusted
2018-11-14 1.1 1.14 1.01 1.1 107900 1.1
write.xlsx(my_stocks_OHLCV, "C:/Users/MICRO/Downloads/Datasets_stocks/dux_OHLCV.xlsx") Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,:arguments imply differing number of rows: 1, 0
如何 运行 write.xlsx 即使我有这些缺失数据?
你需要问的主要问题是,你想要什么?
当您处理股票数据时,最好的办法是,如果您没有股票数据,则将其删除。这样的东西应该可以工作,
my_stocks_OHLCV[lapply(my_stocks_OHLCV,nrow)>0]
如果你想要整行 NA
或 0
然后使用 lapply
函数,对于列表中长度为 0 的每个元素,替换为 NA
、0 向量 (c(0,0,0,0,0,0)
) 等...
像这样,
condition <- !lapply(my_stocks_OHLCV,nrow)>0
my_stocks_OHLCV[condition] <- data.frame(rep(NA,6))
这里我们定义了条件变量,即列表中没有任何数据的元素。然后我们可以将它们替换为 NA
或将 NA
替换为 0
。但是,我想不出这样做的理由。
你的问题的一个变体,也是你可以在 for 循环中处理的一个变体,是检查你是否有数据,如果没有,用 NA
s 替换那里的值,并且你可以给它正确的 headers,因为你知道它与哪只股票有关。
希望对您有所帮助。