我已经环顾了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 struct 本身可能是这里的瓶颈之一.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相关问答推荐

多个ggpredicate对象的平均值

以R为基数排列奇数个图

R Lubridate:舍入/快照日期时间到一天中最近的任意时间?

R Markdown中的交叉引用表

咕噜中的元素列表:map

用相同方法得到不同函数的ROC最优截断值

如何写一个R函数来旋转最后n分钟?

如何将移除事件分配给动态创建的按钮?

如何直接从Fortran到R的数组大小?

如何在modelsummary中重命名统计数据?

未识别时区

如何使用列表中多个列表中的第一条记录创建数据框

在RStudio中堆叠条形图和折线图

R中的哈密顿滤波

用两种 colored颜色 填充方框图

如何对r中包含特定(未知)文本的行求和?

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

在r中整理图例和堆叠图的问题

用满足特定列匹配的另一行替换NA行

使用函数从R中的列中删除标高