Tenho esses quadros de dados em R:
abc_1 <- data.frame(col1 = 1:5, col2 = 6:10, col3 = 11:15)
abc_2 <- data.frame(col1 = 21:25, col2 = 26:30, col4 = 31:35)
abc_3 <- data.frame(col1 = 41:45, col2 = 46:50, col5 = 51:55)
def_1 <- data.frame(col1 = 61:65, col2 = 66:70, col6 = 71:75)
Para todos os quadros de dados que começam com "abc_", quero identificar o conjunto de colunas compartilhadas em comum com todos os arquivos e, então, vinculá-los.
Tentei fazer isso da maneira mais longa:
all_objects <- ls()
abc_objects <- all_objects[grep("^abc", all_objects)]
common_cols <- Reduce(intersect, lapply(abc_objects, function(x) colnames(get(x))))
combined_df <- do.call(rbind, lapply(abc_objects, function(x) {
df <- get(x)
df[, common_cols, drop = FALSE]
}))
Existe uma maneira mais direta de fazer isso?
Aqui está uma alternativa. Eu começaria criando uma lista de dataframes, que podem então ser vinculados (
do.call(rbind...
não funcionará com os diferentes nomes de colunas).Mantendo-se próximo de sua abordagem, você pode fazer
dando
Observe que esses nomes de linhas podem ser excluídos com um
|> `row.names<-`(NULL)
.