【问题标题】:Looping over a dataframe and it to a new dataframe循环一个数据帧并将其循环到一个新的数据帧
【发布时间】:2016-10-05 06:03:05
【问题描述】:

我想创建一个空数据框,因此执行循环并将新内容添加到(新)数据框。

因此我写了这样的东西:

number <- c(1,2)
text <- c("Yes", "No")
df_test <- data.frame(number, text)

df_base = data.frame(number = numeric(), text = character())

for(i in 1:nrow(df_test)){

 text <- df_test$text[i]
 number <- df_test$number[i]

 df_temp <- data.frame(text, number)
 df_base <- rbind(df_base, df_temp) 

}

上面的代码可以解决问题,但似乎不是最有效的方法。有什么想法可以写得更好吗?

【问题讨论】:

  • 你不应该在 R (see here) 中逐行创建数据框。在这种情况下,为什么不直接使用df_base &lt;- df_test
  • 这只是一个例子......仅用于复制目的
  • 如果您的目标是更改新表中的文本或数字列,请知道找到vectorized 解决方案通常也更有效

标签: r


【解决方案1】:

如果您知道 data.frame (df_base) 的最终大小,您可以预先分配对象:

df_base <- data.frame(text=character(nrow(df_test)),
                      number=numeric(nrow(dr_test)))

然后,在循环中,填写这些列:

for(i in 1:nrow(df_test)){

  text <- df_test$text[i]
  number <- df_test$number[i]

  df_base[i,"text"] <- text
  df_base[i,"number"] <- number

}

这将使 R 免于制作 df_base 的多个副本,因为它在每个循环中 rbinds。

【讨论】:

  • @Imo,这很有帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多