在R中将数据帧与2个不同模式连接起来的最佳方法是什么?

时间:2018-04-09 15:20:50

标签: r dataframe design-patterns concatenation

我有几个数据框:

toto1_1 <- data.frame(x=1:3)
toto1_2 <- data.frame(x=1:3)
titi1_1 <- data.frame(x=1:3)
titi1_2 <- data.frame(x=1:3)

使用2种不同的模式连接这些表的最佳方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

mget函数在给定字符向量时将返回数据对象列表:

totoList <- mget( paste0( rep(c("toto","titi"),each=2), rep(c("1_1","1_2") ) ) 

str(totoList)
List of 4
 $ toto1_1:'data.frame':    3 obs. of  1 variable:
  ..$ x: int [1:3] 1 2 3
 $ toto1_2:'data.frame':    3 obs. of  1 variable:
  ..$ x: int [1:3] 1 2 3
 $ titi1_1:'data.frame':    3 obs. of  1 variable:
  ..$ x: int [1:3] 1 2 3
 $ titi1_2:'data.frame':    3 obs. of  1 variable:
  ..$ x: int [1:3] 1 2 3

如果目标是单一的欲望,那么这可能是通往以下途径的中间结果:

do.call( "rbind", totoList)  # rbind transforms character value to an R function 
          x
toto1_1.1 1
toto1_1.2 2
toto1_1.3 3
toto1_2.1 1
toto1_2.2 2
toto1_2.3 3
titi1_1.1 1
titi1_1.2 2
titi1_1.3 3
titi1_2.1 1
titi1_2.2 2
titi1_2.3 3

答案 1 :(得分:0)

请参阅下面的一些建议。 1.它们使用rbind()函数连接起来 2.它们使用c()函数连接 - 保留为单独的向量元素,但连接成单个元素 3.也许更有用,因为它保留了原始表的表名以供将来分析和排序:将每个表添加到列表中,然后为每个表名及其数据创建data.frame;然后使用rbind()

连接成一个对象
toto1_1 <- data.frame(x=1:3)
toto1_2 <- data.frame(x=1:3)
titi1_1 <- data.frame(x=1:3)
titi1_2 <- data.frame(x=1:3)

#1
rbind(toto1_1,toto1_2,titi1_1,titi1_2)

#2
c(toto1_1,toto1_2,titi1_1,titi1_2)

#3
l <- list(toto1_1=toto1_1,toto1_2=toto1_2,titi1_1=titi1_1,titi1_2=titi1_2)
do.call(rbind,lapply(names(l),FUN=function(x) { data.frame(table_name=x,table_data=l[[x]]) }))