2017-01-23 97 views
2

假设我有多个数据帧都具有相同的向量名称,并且想要绑定所有具有常规模式的数据帧。因此,对于这3个数据帧:基于数据帧名称中的常见模式对数据帧进行绑定

df.1 <- data.frame(column1 = factor(sample(c("Male","Female"), 10, replace=TRUE)), 
        speed=runif(10)) 
df.2 <- data.frame(column1 = factor(sample(c("Male","Female"), 10, replace=TRUE)), 
        speed=runif(10)) 
df.3 <- data.frame(column1 = factor(sample(c("Male","Female"), 10, replace=TRUE)), 
        speed = runif(10)) 

我想rbind一切与普通模式

我曾尝试创建一个列表,然后从该使用创建一个数据帧“DF *”:

temp <- lapply(ls(pattern = "df.*"), get) 
temp2<- as.data.frame(temp) 

然而,这只产生一个6列的数据框架有效地绑定整个事情,而不是绑定。

回答

4

我们可以使用lsmget

library(data.table) 
rbindlist(mget(ls(pattern = "^df\\.\\d+"))) 

或用dplyr

library(dplyr) 
mget(ls(pattern="^df\\.\\d+")) %>% 
       bind_rows() 

或者与rbindbase R

do.call(rbind, mget(ls(pattern="^df\\.\\d+"))) 
+0

完美,谢谢。问题:为什么使用'“^ df \\。\\ d +”'而不是'“df。*”'? –

+0

@JojoOno根据你创建的对象,“df.1”,“df.2”,“df.3”等,我认为这些模式在开头('^')是非常具体的,即'df'字符串,后面跟着'.'(这是一个元字符,意味着任何字符都可以匹配,所以我们转义('\\'it),然后是一个或多个数字('\\ d +') – akrun

+0

所以这样可以避免在全球环境中的任何地方都可能附带任何其他对象的可能性? –

1

你可以试试:

new_df <- do.call("rbind",mget(ls(pattern = "^df.*")))