我试图运行我的代码,但始终收到以下错误消息:
Fehler in `[<-.data.frame`(`*tmp*`, , i, value = list(`NOVN SW Equity PX_LAST` = c(6.54, : new columns would leave holes after existing columns
我的代码如下
library(tidyverse)
Daten_bloomberg <- read_excel("~/Desktop/master thesis topics/Data for R/Daten_bloomberg.xlsx", na = "NA")
Event <- read_excel("~/Desktop/master thesis topics/Data for R/Event.xlsx", col_types = c("numeric", "text"))
Daten_bloomberg <- as.data.frame(sapply(Daten_bloomberg, as.numeric))
Daten_bloomberg[is.na(Daten_bloomberg)] <- NA
Data_last_price <- data.frame(Data1 = rep(1,7875) )
for (i in 1:133) {
EventTicker <- as.character(Event[i,2])
EventTicker1 <- paste(as.character(Event[i,2]) , "PX_Last")
Data1 <- select(Daten_bloomberg , contains(EventTicker1))
Data_last_price[,i] <- rep(Data1,1)
}
使用该代码,我基本上尝试使用包含代码号和字符串PX_Last的列来创建一个新的数据格式。Daten_bloomberg包含7875行和884个变量。事件包含133个观察结果和两个变量。
然而,当我运行这个循环时,总是会出现上面的错误消息,并且循环停止在位置87。我猜问题在于Dataset Daten_bloomberg中的列包含大量NA值。但我不知道怎样才能解决这个问题。有什么主意吗?
发布于 2021-03-14 17:39:40
好吧,我们有几件事要处理。
首先,欢迎来到SO,您的代码是不可复制的,因为它缺少一个示例数据集。您还可以省略rep(data1, 1)
作为rep(x, 1) == x
。
接下来,令人难以置信的是,您已经获得了您的具体错误,这意味着我必须深入到源代码中才能找到它,因为在我6年的R经验中从未见过它。它可能不容易看到,但您的错误不是来自迭代87,而是迭代86。
让我们用一个可重复的例子来说明(首先注意名字)。
names(mtcars)
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
library(tidyverse)
mtcars2 <- mtcars
newcols <- c("I'm not column", "cyl") # <= one column exist, one does not
for(i in seq_along(newcols)){
mtcars[, ncol(mtcars) + i] <- select(mtcars2, contains(newcols[i]))
}
print(i)
[1] 2
注意它是如何在cyl
(i = 2)上抛出一个错误的,所以最明显的想法是“我的cyl
列出了问题”。但是让我们看一下地铁
names(mtcars)
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
哦..。"I'm not a column"
没有新列(应该命名为"V1"
),我试图将其放置到位置12。接下来,我们尝试将cyl
放在第13位置,但没有列12,因此[<-.data.frame
尝试创建第12列,但由于我们没有为该列提供任何值,它会引发一个错误,如下所示:
mtcars[, 13] <- mtcars2$cyl
因此,简单地说,对于您的具体情况,运行下面的代码将导致最后一行的打印(这是您的错误)。
i <- 86
EventTicker <- as.character(Event[i,2])
EventTicker1 <- paste(as.character(Event[i,2]) , "PX_Last")
Data1 <- select(Daten_bloomberg , contains(EventTicker1))
nrow(Data1)
[1] 0
https://stackoverflow.com/questions/66626851
复制相似问题