在 R 中的 data.frame 中插入一行

Inserting a row into a data.frame in R

我已经引用了这个问题 Insert a row in a data.table 但是,我收到了这个错误:

Warning message:
In `[<-.factor`(`*tmp*`, ri, value = "All") :
  invalid factor level, NA generated

当我尝试插入一个仅包含值 "All" 的新行时,如下所示:

d <- copy(as.data.frame(Orange))
d <- rbind(d, c("All", "All", "All"))

它发出警告并在最后两列中插入 "All",在第一列中插入 NA

我哪里做错了,我知道这个应该很简单。

尝试将 c("all", "all", "all") 更改为 list("all", "all", "all")。向量(由 c() 创建)在数据框中创建列。你可以做 list 或者做你想做的事情 rbind data.frame (因为 data.frames 只是特殊列表)。

根据 thisrbind 参数必须是数据框或可以强制转换为数据框的对象。它不能将 c("All","All","All") 强制转换为数据框。我只想创建一个新的数据框:d <- rbind(d, data.frame(...))。您可能还会遇到一些数据类型不匹配的情况。

这是我可以无误地运行它的唯一方法。不过,我认为有更好的方法可以做到这一点。

d <- copy(as.data.frame(Orange))
add <- data.frame("All", "All", "All")
names(add) <- names(d)
d <- rbind(d, add)

另一种方法是,您可以将数据框的行数加 1,然后根据需要手动插入您的值。这不是最简洁的方式,但您可以混合和匹配数据类型。

  # Get the next row number
  row_number <- nrow(df)+1
  
  # Add a new row to a dataframe. You can refer to columns by name 
  # or by column number. 
  df[row_number,"today"] <- lubridate::today()
  df[row_number,"column_2"] <- "My value" 
  df[row_number,3] <- "My next value"
  df[row_number,4] <- "My third value"