rbind три базы данных с использованием функции Rbind

#r #merge #concatenation #rbind #cbind

Вопрос:

Я знаю, что это вопрос новичка,у меня есть эти 3 файла xlsx с 3 тремя базами данных одних и тех же 14 переменных , это панель данных поперечного сечения, Все, что я хочу, это объединить их в одну базу данных под названием eplt, сначала я импортирую их

 library(dplyr)
library(ggplot2)
library(xlsx)
##Import the three data bases

epl_data<-read.xlsx("Notes_ETAB2016-2017.xlsx",sheetIndex = 1,header = TRUE)
epl_data2<-read.xlsx("Notes_ETAB2017-2018.xlsx",sheetIndex = 1,header = TRUE)
epl_data3<-read.xlsx("Notes_ETAB2018-2019.xlsx",sheetIndex = 1,header = TRUE)
## to render the number of rows in each of them
nrow(epl_data)
nrow(epl_data2)
nrow(epl_data3)
# I want to rbind the three sets together  

eplt<-rbind(epl_data,epl_data2,epl_data3)
 

общее количество строк составляет 29441, но при применении Rbind для связывания их всех вместе я получаю ошибку

 > eplt<-rbind(epl_data,epl_data2,epl_data3)
Error in match.names(clabs, names(xi)) : 
  names do not match previous names
 

но имена переменных в 3 наборах одинаковы
введите описание изображения здесь
не мог бы кто-нибудь, пожалуйста, помочь, я хочу только повторно связать 25000 наблюдений, а остальные 4441 оставить, чтобы сравнить их с прогнозируемыми данными модели множественной регрессии,
заранее спасибо

Комментарии:

1. Не могли бы вы предоставить имена переменных для всех трех фреймов данных, пожалуйста?

2. хорошо , я отредактирую сообщение, спасибо

3. Кроме того, я рекомендую вам использовать janitor::clean_names(data) его всякий раз, когда вы импортируете данные из Excel. Он хорошо справляется с проблемами с именами переменных при импорте файла Excel, делая имена переменных стандартными

4. Что dplyr и ggplot2 какие функции требуются?

5. @пользователь2161721 epl_data3 <- epl_data3 %>% rename(SVT = Svt)

Ответ №1:

У третьего фрейма данных нет тех же имен, что и у первых двух: Svt не в верхнем регистре.

Один из способов-применить имена одного фрейма данных к другим:

 colnames(epl_data2) <- colnames(epl_data)
colnames(epl_data3) <- colnames(epl_data)
 

Но я рекомендую использовать пакет janitor всякий раз, когда ваши данные поступают из файлов Excel. Действительно, часто возникают проблемы с именами переменных. Этот пакет обеспечивает хорошее форматирование имен столбцов данных:

 epl_data <- janitor::clean_names(epl_data)
epl_data2 <- janitor::clean_names(epl_data2)
epl_data3 <- janitor::clean_names(epl_data3)
 

Следовательно, rbind должно работать

Комментарии:

1. спасибо, это сработало , но мне нужно сделать его на 4000 обс меньше, то есть я хочу объединить первые две строки только с 5588 строками из третьей, чтобы исключить 4000 обс, не могли бы вы мне помочь, спасибо

2. Говоря , что вы хотите сохранить 5588 первых строк из третьей: rbind(epl_data, epl_data2, epl_data3 %>% slice_head(n = 5588)) , и если вы хотите выбрать 5588 случайным образом, используйте slice_sample(n=5588) вместо этого

Ответ №2:

Как уже упоминалось, у вас есть несоответствие в имени переменной 'SVT' . Вот альтернатива, которая сделала бы имена столбцов строчными и связала бы их вместе в одном фрейме данных.

 library(dplyr)
library(purrr)

eplt <- list.files(pattern = 'Notes_ETAB2016-\d \.xlsx') %>%
  map_df(~readxl::read_excel(.x) %>% rename_with(~tolower(.)))