Варианты Base R:
set.seed(42)
listdat <- replicate(3, data.frame(i=sample(100, size=2), j=sample(100, size=2), Value=sample(100, size=2)), simplify = FALSE)
str(listdat)
# List of 3
# $ :'data.frame': 2 obs. of 3 variables:
# ..$ i : int [1:2] 92 93
# ..$ j : int [1:2] 29 83
# ..$ Value: int [1:2] 65 52
# $ :'data.frame': 2 obs. of 3 variables:
# ..$ i : int [1:2] 74 14
# ..$ j : int [1:2] 66 70
# ..$ Value: int [1:2] 46 72
# $ :'data.frame': 2 obs. of 3 variables:
# ..$ i : int [1:2] 94 26
# ..$ j : int [1:2] 47 94
# ..$ Value: int [1:2] 98 12
Начиная с этого, первое, что мы можем сделать, это просто объединить их по строкам, все в одном go:
do.call(rbind, listdat)
# i j Value
# 1 92 29 65
# 2 93 83 52
# 3 74 66 46
# 4 14 70 72
# 5 94 47 98
# 6 26 94 12
Было бы неплохо указать, с какого индекса они пришли. Если они не названы, то вы можете просто включить индексный номер:
do.call(rbind, Map(cbind, listdat, num=seq_along(listdat)))
# i j Value num
# 1 92 29 65 1
# 2 93 83 52 1
# 3 74 66 46 2
# 4 14 70 72 2
# 5 94 47 98 3
# 6 26 94 12 3
Если у них есть имена, однако, мы можем использовать ту же технику:
names(listdat) <- c("A","B","C")
do.call(rbind, Map(cbind, listdat, name=names(listdat)))
# i j Value name
# A.1 92 29 65 A
# A.2 93 83 52 A
# B.1 74 66 46 B
# B.2 14 70 72 B
# C.1 94 47 98 C
# C.2 26 94 12 C
Per @ akrun's предложение с комментариями, вот два предложения внешнего пакета, которые немного короче.
# 'dplyr'
dplyr::bind_rows(listdat) # if no names present
dplyr::bind_rows(listdat, .id = 'name') # with names
# 'data.table'
data.table::rbindlist(listdat) # if no names present
data.table::rbindlist(listdat, idcol = 'name') # with names