如何在r

时间:2018-03-27 20:05:27

标签: r

我有一个返回数据帧的tryCatch块。在某些情况下,它返回一个包含0行的空数据帧。无论它是否空,我都需要在那里添加一些数据。 (一些列有一行)。我发现当它返回一个空的数据帧时,向数据帧添加列总是给我错误。例如:

dt <- data.frame()
for (a in  0:2) {
    table <- tryCatch(
                { mtcars %>%
                    filter(am==a) %>% 
                    group_by(vs) %>% 
                    summarise(n=n()) %>% 
                    spread(vs, n)
                },
                error = function(e) {
                    return(NULL)
                } )

    table$am = a 
    dt <- bind_rows(dt, table)
}

以下是错误消息:

 Error in `$<-.data.frame`(`*tmp*`, "am", value = 2L) : replacement has 1 row, data has 0

任何人都可以帮忙解决这个问题吗?非常感谢。

3 个答案:

答案 0 :(得分:1)

一种选择可能是使用有效列但data.frame行声明您的0。这为add row使用nrow(data)+1和指定所需列的值提供了灵活性。

data = data.frame(ID = integer(), Result = integer())

data[nrow(data)+1,] = c(1, 5)
data
# ID Result
# 1  1      5

修改

OP遇到tryCatch阻止问题。在这种情况下,似乎存在从tryCatch块抛出异常并且table的值被指定为NULL的条件。

可能的解决方法是替换

table$am = a 
dt <- bind_rows(dt, table)

  if(!is.null(table)){
    table$am = a 
    dt <- bind_rows(dt, table)
  }else{
    dt[nrow(dt)+1, "am"] <- a
  }

答案 1 :(得分:0)

data<-data.frame(rbind(data, ID=1))

答案 2 :(得分:0)

您无法像这样向空数据框添加条目。尝试 {{1}}