我正在做一个rbind,我遇到以下错误,如下所示:
Error in rbind(deparse.level, ...) : replacement has length zero
我该如何解决此错误?
代码在循环中。我正在浏览一个数据帧,如果某个行的步骤为空值,我将其替换为某些内容并继续。这很有效,直到我进入第289行,基本上我知道它看起来就像之前那样(除了间隔是0而不是2355,但是当我把它改为2356只是为了检查是不是它,仍然得到相同的错误,所以这是某种格式化的东西)。
代码如下:
rbind(df, row)
我有一个数据框,让我们称之为df,看起来就像这样。
steps interval dates
283 2.6037736 2330 2012-10-01
284 4.6981132 2335 2012-10-01
285 3.3018868 2340 2012-10-01
286 0.6415094 2345 2012-10-01
287 0.2264151 2350 2012-10-01
288 1.0754717 2355 2012-10-01
该行如下:
steps interval dates
289 0 0 2012-10-02
以下是有关df和row的一些详细信息:
data.frame': 288 obs. of 3 variables:
$ steps :'data.frame': 288 obs. of 1 variable:
..$ steps: num 1.717 0.3396 0.1321 0.1509 0.0755 ...
$ interval: int 0 5 10 15 20 25 30 35 40 45 ...
$ dates : Date, format: "2012-10-01" "2012-10-01" "2012-10-01" "2012-10-01" ...
和
'data.frame': 1 obs. of 3 variables:
$ steps : int 0
$ interval: int 0
$ dates : Date, format: "2012-10-02"
更新
我认为问题在于我的步骤是数据帧中的数据帧。它应该只是一列数值。以下是一些代码,用于指定df
的预期定义。请参阅:
df <- data.frame(steps = numeric, date = date, interval = integer)
> str(df)
'data.frame': 0 obs. of 3 variables:
$ steps :function (...)
$ date :function (...)
$ interval:function (...)
以下内容不容易重复,我在高级中道歉,但我可以描述代码正在做什么。我的NA
数据集中包含steps
,我使用row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)
将NA
替换为数字。例如,这个想法是:
steps interval dates
289 NA 0 2012-10-02
变为
steps interval dates
289 0 0 2012-10-02
我使用的循环如下:
for(i in 1:size)
{
index<-i
row <- data[i,]
isNa <- is.na(row$steps)
if(isNa)
{
row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)
}
df<-rbind(df, row)
}
不要担心尝试复制上面的代码,我认为这不重要,但我希望它能帮助人们理解我可能正在做的事情。如果没有,请告诉我,我会看看是否可以创建一些可复制的代码(这需要一些时间)。它可能会爆炸,因为steps
在某种程度上是df
中数据框内的数据框。哪个不对。我们的row
定义是正确的。
我尝试了以下方法无济于事:
do.call
方法我认为我的格式显然有问题,但如果我不知道什么是错的话我无法解决问题。以上是我能够从调试代码中收集到的。坦率地说,我完全不知所措,并且会感谢有经验的人向我表明出现了什么问题,以及我如何才能最好地解决这个问题?任何帮助,问题或评论都是最受欢迎的。
答案 0 :(得分:0)
执行以下操作:
row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)
问题是steps
是一个数据框对象。换句话说,我们试图将具有所需数据帧定义的row
绑定到没有正确定义的数据帧对象df
。
这是因为
row$steps <- subset(avgStepsByInterval, interval == row$interval, steps)
正在返回一个数据框对象。所以我们只需要按如下方式重写它:
row$steps <- as.numeric(subset(avgStepsByInterval, interval == row$interval, steps))
这意味着df
和row
的定义会匹配。
如果您正在搜索stackoverflow并且您看到此错误。确保您尝试rbind
的对象具有匹配的预期结构。