r - R错误:新列会在现有列之后留下孔;如何解决这个问题?
问题描述
我尝试运行我的代码,但总是收到以下错误消息:
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 值。但我不知道如何解决这个问题。有人有想法吗?
解决方案
好吧,我们有一些事情要解决。
首先,欢迎使用 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
哦,注意它是如何在 (i = 2) 上抛出错误的cyl
,所以最明显的想法是“我的cyl
专栏有问题”。但是让我们看一下 mtcars
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
推荐阅读
- r - 查找每组列中的最后一个非零元素,填充不同的列
- mongodb - 无法过滤带有空格的项目 MongoDB
- gis - X/Y 坐标到经度/纬度,.net 核心应用程序包
- matlab - 如何在 MATLAB 中为 4D 数据构造分段多项式(三次样条)?
- sql - 为什么这个 Oracle 查询这么慢?
- circleci - 运行测试时 circleci python -t 标志不起作用
- scala - sbt testOnly 带有标签的排除列表不起作用
- r - 具有正向参数的 R stats::step 函数未优化 LR 模型(AIC)
- typescript - 设置语言工作者重试开始计数?
- hugo - 如何获取 Hugo v0.59 中特定部分的前三个帖子?