在for循环中合并和命名数据帧

在for循环中合并和命名数据帧,r,for-loop,merge,R,For Loop,Merge,我有一堆DF,命名为:df1,df2,…,dfN 和lt1,lt2,…,ltN 我想将它们合并成一个循环,类似于: for (X in 1:N){ outputX <- merge(dfX, ltX, ...) } for(1:N中的X){ outputX您可以将数据帧组合到列表中,并使用mapply,如下例所示: i <- 1:3 d1.a <- data.frame(i=i,a=letters[i]) d1.b <- data.frame(i=i,A=LETTERS

我有一堆DF,命名为:df1,df2,…,dfN

和lt1,lt2,…,ltN

我想将它们合并成一个循环,类似于:

for (X in 1:N){
outputX <- merge(dfX, ltX, ...)
}
for(1:N中的X){

outputX您可以将数据帧组合到列表中,并使用
mapply
,如下例所示:

i <- 1:3
d1.a <- data.frame(i=i,a=letters[i])
d1.b <- data.frame(i=i,A=LETTERS[i])

i <- 11:13
d2.a <- data.frame(i=i,a=letters[i])
d2.b <- data.frame(i=i,A=LETTERS[i])

L1 <- list(d1.a, d2.a)
L2 <- list(d1.b, d2.b)

mapply(merge,L1,L2,SIMPLIFY=F)
# [[1]]
#   i a A
# 1 1 a A
# 2 2 b B
# 3 3 c C
# 
# [[2]]
#   i a A
# 1 11 k K
# 2 12 l L
# 3 13 m M

请注意,提供的是一个基本的R解决方案,其功能与示例代码基本相同。

如果数据帧在列表中,则编写for循环非常简单:

# lt = list(lt1, lt2, lt3, ...)
# if your data is very big, this may run you out of memory
lt = lapply(ls(pattern = "lt[0-9]*"), get)

merged_data = merge(lt[[1]], lt[[2]])


for (i in 3:length(lt)) {
    merged_data = merge(merged_data, lt[[i]])
    save(merged_data, file = paste0("merging", i, ".rda"))
}

如果它们在一个列表中,例如一个名为
lt
的列表,其中有N个元素,每个元素都是一个数据帧,那么这会容易得多。下一次,请参见
?list2env
,了解如何在全局环境中将列表分解为元素。通常这是一个坏主意,但却是一个相当简洁的函数。您为什么建议不要全局保存它们?
sapply(names(result),function(s) assign(s,result[[s]],envir = globalenv()))
# lt = list(lt1, lt2, lt3, ...)
# if your data is very big, this may run you out of memory
lt = lapply(ls(pattern = "lt[0-9]*"), get)

merged_data = merge(lt[[1]], lt[[2]])


for (i in 3:length(lt)) {
    merged_data = merge(merged_data, lt[[i]])
    save(merged_data, file = paste0("merging", i, ".rda"))
}