#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(.)))