R实现一次性合并多个数据框
生活随笔
收集整理的這篇文章主要介紹了
R实现一次性合并多个数据框
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據處理中經常會有這樣的情況,需要合并多個數據(按行或者按列合并),常規的merge或者rbind只能兩個兩個合并,操作繁瑣。可以使用自寫函數或do.call()函數進行數據庫的拼接或合并,具體操作如下:
按列合并
mypath<-"C:/Users/18896/Desktop/example1"multmerge = function(mypath){filenames=list.files(path=mypath, pattern = ".XPT",full.names=TRUE)datalist = lapply(filenames, function(x){read.xport(file=x)})Reduce(function(x,y) {merge(x,y,by="SEQN",all=T)}, datalist) }mergedata<-multmerge(mypath)mypath中為需要合并的所有文件夾的本地目錄,定義函數multmerge,先列出需要合并的數據庫名稱,并讀取為list,使用merge函數合并list中的數據框。最后生成的mergedata為合并之后的data
文件夾不在本地時
data1 <- data.frame(id = 1:6, # Create first example data framex1 = c(5, 1, 4, 9, 1, 2),x2 = c("A", "Y", "G", "F", "G", "Y"))data2 <- data.frame(id = 4:9, # Create second example data framey1 = c(3, 3, 4, 1, 2, 9),y2 = c("a", "x", "a", "x", "a", "x"))data3 <- data.frame(id = 5:6, # Create third example data framez1 = c(3, 2),z2 = c("K", "b"))data_list <- list(data1, data2, data3)my_merge <- function(df1, df2){ # Create own merging functionmerge(df1, df2, by = "id") }Reduce(my_merge, data_list) #id x1 x2 y1 y2 z1 z2 #1 5 1 G 3 x 3 K #2 6 2 Y 4 a 2 b或者使用tidyverse包
install.packages("tidyverse") # Install tidyverse package library("tidyverse") data_list %>% reduce(inner_join, by = "id") # Apply reduce function of tidyverse#id x1 x2 y1 y2 z1 z2 #1 5 1 G 3 x 3 K #2 6 2 Y 4 a 2 b按行合并
library(data.table) DT1 = data.table(A=1:3,B=letters[1:3]) DT2 = data.table(B=letters[4:5],A=4:5) DT3=data.table(A=6:7,B=letters[6:7]) l = list(DT1,DT2,DT3) rbindlist(l, use.names=TRUE) #A B #1: 1 a #2: 2 b #3: 3 c #4: 4 d #5: 5 e #6: 6 f #7: 7 g重復合并某個數據框多次
? do.call("rbind", replicate(4, DT1, simplify = FALSE))?# A B # 1: 1 a # 2: 2 b # 3: 3 c # 4: 1 a # 5: 2 b # 6: 3 c # 7: 1 a # 8: 2 b # 9: 3 c #10: 1 a #11: 2 b #12: 3 cReference:R Merge Multiple Data Frames in List (2 Examples) | Base R vs. tidyverse (statisticsglobe.com)
總結
以上是生活随笔為你收集整理的R实现一次性合并多个数据框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB轻松绘制地图路线——已知及未
- 下一篇: 【PyTorch】 tensor.squ