我已经环顾了StackOverflow,但我找不到针对我的问题的解决方案,这涉及到将行附加到R数据帧.

我正在初始化一个空的2列数据帧,如下所示.

df = data.frame(x = numeric(), y = character())

然后,我的目标是遍历一个值列表,在每次迭代中,在列表的末尾追加一个值.我从以下代码开始.

for (i in 1:10) {
    df$x = rbind(df$x, i)
    df$y = rbind(df$y, toString(i))
}

我还try 了函数cappendmerge,但没有成功.如果你有任何建议,请告诉我.

Update from comment:

推荐答案

使现代化

不知道你想做什么,我再分享一个建议:为每列预先分配你想要的类型的向量,在这些向量中插入值,然后在最后创建你的data.frame.

继续以朱利安的f3分(预分配的data.frame分)作为迄今为止最快的选项,定义如下:

# pre-allocate space
f3 <- function(n){
  df <- data.frame(x = numeric(n), y = character(n), stringsAsFactors = FALSE)
  for(i in 1:n){
    df$x[i] <- i
    df$y[i] <- toString(i)
  }
  df
}

这里有一个类似的方法,但最后一步是创建data.frame.

# Use preallocated vectors
f4 <- function(n) {
  x <- numeric(n)
  y <- character(n)
  for (i in 1:n) {
    x[i] <- i
    y[i] <- i
  }
  data.frame(x, y, stringsAsFactors=FALSE)
}

"microbenchmark"软件包中的microbenchmark将比system.time提供更全面的见解:

library(microbenchmark)
microbenchmark(f1(1000), f3(1000), f4(1000), times = 5)
# Unit: milliseconds
#      expr         min          lq      median         uq         max neval
#  f1(1000) 1024.539618 1029.693877 1045.972666 1055.25931 1112.769176     5
#  f3(1000)  149.417636  150.529011  150.827393  151.02230  160.637845     5
#  f4(1000)    7.872647    7.892395    7.901151    7.95077    8.049581     5

f1()(下面的方法)是非常低效的,因为它调用data.frame的频率很高,而且在R中以这种方式增长的对象通常很慢.f3()由于预分配而得到了很大的改进,但data.frame结构本身可能是这里的瓶颈之一.f4()试图绕过这个瓶颈,而不影响你想要采取的方法.


原始答案

这真的不是个好主意,但如果你想这样做,我想你可以试试:

for (i in 1:10) {
  df <- rbind(df, data.frame(x = i, y = toString(i)))
}

请注意,在代码中还有一个问题:

  • 如果不希望字符转换为因子,则应使用stringsAsFactors.用法:df = data.frame(x = numeric(), y = character(), stringsAsFactors = FALSE)

R相关问答推荐

如何按包含特殊符号 R 的名称对列进行排序

如何根据 R 中的日期条件将数据框拆分为新的数据框

如何从R中的字符串中删除一定长度的数字模式

在嵌套列表中从第一个列表中选择第一个元素,从第二个列表中选择第二个元素,依此类推

使用 R 解密 PHP 中加密的消息

如何在条形图中用零线分割负条和正条?

tidyverse:数据转换,gather()

在R中按组查找最长的值序列

如何在两个不同的数据帧上运行 cor.test()

使用 ggplot2 创建一个中心 y 轴图,左右两侧有两个 x 轴

在 R 中的数据框中创建一个包含 1 列值总和的新行

如何在 r 中为转换后的变量创建汇总统计表

将汇总表添加到分面网格箱线图

删除不增加基于其他列值的行

停止更新*输入无效react

R过滤多次出现但不包含特定字符串的数据

如何将所有列重命名为R中的中间分隔符?

如何将第二个变量添加到直方图 ggplot 并在当前直方图上绘制,从第二个变量添加密度曲线

忽略列zoom 行值

使用 dplyr 随机标记组内的记录