首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R错误:新列将在现有列之后留下漏洞;如何解决此问题?

R错误:新列将在现有列之后留下漏洞;如何解决此问题?
EN

Stack Overflow用户
提问于 2021-03-14 16:26:04
回答 1查看 1.5K关注 0票数 2

我试图运行我的代码,但始终收到以下错误消息:

Fehler in `[<-.data.frame`(`*tmp*`, , i, value = list(`NOVN SW Equity PX_LAST` = c(6.54, : new columns would leave holes after existing columns

我的代码如下

代码语言:javascript
运行
复制
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值。但我不知道怎样才能解决这个问题。有什么主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 17:39:40

好吧,我们有几件事要处理。

首先,欢迎来到SO,您的代码是不可复制的,因为它缺少一个示例数据集。您还可以省略rep(data1, 1)作为rep(x, 1) == x

接下来,令人难以置信的是,您已经获得了您的具体错误,这意味着我必须深入到源代码中才能找到它,因为在我6年的R经验中从未见过它。它可能不容易看到,但您的错误不是来自迭代87,而是迭代86。

让我们用一个可重复的例子来说明(首先注意名字)。

代码语言:javascript
运行
复制
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列出了问题”。但是让我们看一下地铁

代码语言:javascript
运行
复制
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列,但由于我们没有为该列提供任何值,它会引发一个错误,如下所示:

代码语言:javascript
运行
复制
mtcars[, 13] <- mtcars2$cyl

因此,简单地说,对于您的具体情况,运行下面的代码将导致最后一行的打印(这是您的错误)。

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66626851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档