在for循环中将数据帧附加在一起

Ibe*_*Ibe 42 r

我有一个for loop在每次迭代后生成一个数据帧.我想将所有数据框附加在一起,但发现它很困难.以下是我正在尝试的,请建议如何解决它:

d = NULL
for (i in 1:7) {

  # vector output
  model <- #some processing

  # add vector to a dataframe
  df <- data.frame(model)

}

df_total <- rbind(d,df)
Run Code Online (Sandbox Code Playgroud)

Gre*_*gor 104

不要在循环内部进行.制作一个列表,然后将它们组合在循环之外.

datalist = list()

for (i in 1:5) {
    # ... make some data
    dat <- data.frame(x = rnorm(10), y = runif(10))
    dat$i <- i  # maybe you want to keep track of which iteration produced it?
    datalist[[i]] <- dat # add it to your list
}

big_data = do.call(rbind, datalist)
# or big_data <- dplyr::bind_rows(datalist)
# or big_data <- data.table::rbindlist(datalist)
Run Code Online (Sandbox Code Playgroud)

这是一种更像R的做事方式.它也可以大大加快,特别是如果您使用dplyr::bind_rowsdata.table::rbindlist最终组合数据帧.

  • 只是将代码中的rbind替换为cbind。它起作用了,现在所有列表都放在单独的列中 (2认同)
  • 同样,如果您觉得此步骤很慢,请尝试使用dplyr :: bind_cols(), (2认同)
  • `do.call(rbind, datalist)` 是一种很好的写法 `rbind(datalist[[1]], datalist[[2]], datalist[[3]], ...)` (2认同)

maR*_*tin 7

您应该尝试这样:

df_total = data.frame()
for (i in 1:7){
    # vector output
    model <- #some processing

    # add vector to a dataframe
    df <- data.frame(model)
    df_total <- rbind(df_total,df)
}
Run Code Online (Sandbox Code Playgroud)