R中將迴圈產生的資料框合併

weixin_34391445發表於2018-03-29

1.問題

今天利用R寫迴圈的時候出現了一個問題,迴圈內會產生多個資料框,希望將這多個資料庫合併並生產一個最終的資料框,最後利用了list和do.call()功能進行了實現。

2.解決

例如假設我們有如下三個資料框

df1 <- data.frame(cell=c(1,2,3),val=c(345,123,466))
df2 <- data.frame(cell=c(67,3,2),val=c(234,234,56))
df3 <- data.frame(cell=c(3,67,23),val=c(23,8,34))

現在我們希望將這三個資料框進行合併:
首先建立一個空list,利用get()將所有資料框寫入,形成一個2維的list,然後利用do.call()進行合併。

l <- list()
for(i in 1:3){
  df.now <- get(paste0("df",i))
  l[[i]] <- df.now
}

do.call(rbind,l)

經過評論提醒,還有一種方法可能會顯得更加易於理解些,即先形成一個空的data.frame,然後直接利用rbind將變數資料框合併到最終的資料框中。

l <- data.frame()
for(i in 1:3){
df.now <- get(paste0("df",i))
l <- rbind(l, df.now)
}

兩種方法最後得到的結果都是:

    cell val
1    1 345
2    2 123
3    3 466
4   67 234
5    3 234
6    2  56
7    3  23
8   67   8
9   23  34

3.總結

這雖然是個小的track,但是在資料處理的時候有時會顯得非常有用。

相關文章