【问题标题】:Adding new row to an existing data frame with a function使用函数向现有数据框添加新行
【发布时间】:2016-04-12 20:36:25
【问题描述】:

我想使用如下函数向现有数据框添加新行:

df <- data.frame(num1 = numeric(),
                 num2 = numeric(),
                 int1 = integer(),
                 chr1 = character(),
                 stringsAsFactors=FALSE)

filler <- function () {
  newrow = c(0.1, 0.01, 100, "char")
  df[nrow(df)+1, ] <- newrow
  assign(x = "df", value = df, envir = .GlobalEnv)
}
filler

但什么都没有发生。

我想得到以下输出:

> df
  num1 num2 int1 chr1
1  0.1 0.01  100 char

注意:我不想在函数中定义新表,因为我想用不同的“newrow”值重新运行函数。

【问题讨论】:

  • 这一行会将所有值强制转换为character BTW:c(0.1, 0.01, 100, "char")
  • 您应该将df 传递给函数,并将return 修改后的数据框传递给函数,以使函数适合函数式编程范例。或者让函数不接触数据框,只返回要添加的行的 1 行数据框。无论哪种情况,只需在函数内部或外部使用rbind()
  • @Gregor - 您的解决方案运行良好。谢谢! :)

标签: r function assign


【解决方案1】:

我相信这应该对你有用。我使用了一个通用的 a 行,因此您可以将新值传递给数据框。您可以通过执行以下操作传递值向量:c(value1, value2, value3, value4)

df <- data.frame(num1 = numeric(),
                 num2 = numeric(),
                 int1 = integer(),
                 chr1 = character(),
                 stringsAsFactors=FALSE)

row_attempt <- c(1,2,3,"Master")

filler <- function(frame_to_attach, my_row){
    newrow = my_row
    data_frame <- rbind(frame_to_attach,my_row)
    colnames(data_frame) <- colnames(frame_to_attach)
   return(data_frame)
}

z <- filler(df, row_attempt)
z

【讨论】:

  • @sandoronodi 您只是没有分配结果;这个答案很好用。 df &lt;- filler(df, row_attempt) 现在我有一行,df &lt;- filler(df, row_attempt) 现在是两行,你想运行多少次都行,每次都用df &lt;- 分配输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2019-12-29
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
相关资源
最近更新 更多