# Method 1: Combine data frames with different row numbers
df1 <- data.frame(a = 1:3)
df2 <- data.frame(b = 1:5)
df3 <- data.frame(c = 1:4)
df4 <- data.frame(d = 1:6)
# Check data frames
df1; df2; df3; df4
## a
## 1 1
## 2 2
## 3 3
## b
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## c
## 1 1
## 2 2
## 3 3
## 4 4
## d
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
# Get maximum number of rows across all data frames
max_rows <- max(sapply(list(df1, df2, df3, df4), nrow))
max_rows
## [1] 6
# Combine using data.frame() - automatically fills with NA
result <- data.frame(
df1[seq_len(max_rows),], # seq_len is safer than 1:max_rows
df2[seq_len(max_rows),],
df3[seq_len(max_rows),],
df4[seq_len(max_rows),]
)
result
## df1.seq_len.max_rows.... df2.seq_len.max_rows.... df3.seq_len.max_rows....
## 1 1 1 1
## 2 2 2 2
## 3 3 3 3
## 4 NA 4 4
## 5 NA 5 NA
## 6 NA NA NA
## df4.seq_len.max_rows....
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
#########################
# Create list of all data frames (假设数据框命名为 df1, df2, ..., df100)
df_list <- mget(paste0("df", 1:4))
# Get max rows
max_rows <- max(sapply(df_list, nrow))
# Combine all at once
result <- do.call(data.frame,
lapply(df_list, function(df) df[seq_len(max_rows),])
)
result
## df1 df2 df3 df4
## 1 1 1 1 1
## 2 2 2 2 2
## 3 3 3 3 3
## 4 NA 4 4 4
## 5 NA 5 NA 5
## 6 NA NA NA 6
##################################################
# Method 2: Combine data frames with different column names
# Create sample data frames with different columns
df1 <- data.frame(
a = 1:3,
b = letters[1:3]
)
df2 <- data.frame(
a = 4:6,
b = letters[4:6],
c = c("x", "y", "z") # Extra column
)
df3 <- data.frame(
a = 7:9,
d = c("m", "n", "p") # Different column name
)
# Check data frames
df1; df2; df3
## a b
## 1 1 a
## 2 2 b
## 3 3 c
## a b c
## 1 4 d x
## 2 5 e y
## 3 6 f z
## a d
## 1 7 m
## 2 8 n
## 3 9 p
# Load dplyr package
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Combine using bind_rows() - automatically handles different columns
result <- bind_rows(df1, df2, df3)
result
## a b c d
## 1 1 a <NA> <NA>
## 2 2 b <NA> <NA>
## 3 3 c <NA> <NA>
## 4 4 d x <NA>
## 5 5 e y <NA>
## 6 6 f z <NA>
## 7 7 <NA> <NA> m
## 8 8 <NA> <NA> n
## 9 9 <NA> <NA> p
# Method 1: Using bind_rows with list
library(dplyr)
# Create list of all dataframes (assuming named df1, df2, ..., df100)
df_list <- mget(paste0("df", 1:3))
# Combine all at once
result <- bind_rows(df_list)
result
## a b c d
## 1 1 a <NA> <NA>
## 2 2 b <NA> <NA>
## 3 3 c <NA> <NA>
## 4 4 d x <NA>
## 5 5 e y <NA>
## 6 6 f z <NA>
## 7 7 <NA> <NA> m
## 8 8 <NA> <NA> n
## 9 9 <NA> <NA> p
my_list <- list(
data.frame(a = 1:3),
data.frame(b = 1:5),
data.frame(c = 1:4),
data.frame(d = 1:6)
)
library(dplyr)
# Get maximum number of rows
max_rows <- max(sapply(my_list, nrow))
result <- bind_cols(
lapply(my_list, function(df) df[seq_len(max_rows),])
)
## New names:
## • `` -> `...1`
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
result
## # A tibble: 6 × 4
## ...1 ...2 ...3 ...4
## <int> <int> <int> <int>
## 1 1 1 1 1
## 2 2 2 2 2
## 3 3 3 3 3
## 4 NA 4 4 4
## 5 NA 5 NA 5
## 6 NA NA NA 6