Относительно новый с R для такого рода вещей, поиск довольно много и не мог найти много полезного.слияние нескольких кадров данных с повторяющимися строками в R
У меня около 150 файлов .csv с 40 000 - 60 000 строк каждый, и я пытаюсь объединить 3 столбца из каждого в один большой фрейм данных. У меня есть небольшой скрипт, который извлекает 3 столбца с интересом («id», «name» и «value») из каждого файла и объединяется с «id» и «name» с более крупным фреймом данных «MergedData». Вот мой код (я уверен, что это очень неэффективный способ сделать это, и что теперь все в порядке со мной, но, конечно, я открыт для лучших вариантов!):
file_list <- list.files()
for (file in file_list){
if(!exists("MergedData")){
MergedData <- read.csv(file, skip=5)[ ,c("id", "name", "value")]
colnames(MergedData) <- c("id", "name", file)
}
else if(exists("MergedData")){
temp_data <- read.csv(file, skip=5)[ ,c("id", "name", "value")]
colnames(temp_data) <- c("id", "name", file)
MergedData <- merge(MergedData, temp_data, by=c("id", "name"), all=TRUE)
rm(temp_data)
}
}
Не каждый файл имеет такое же количество строк, хотя многие строки являются общими для многих файлов. У меня нет инклюзивного списка строк, поэтому я включил all = TRUE для добавления новых строк, которые еще не существуют в файле MergedData.
Моя проблема: многие файлы содержат 2-4 строки с одинаковыми «id» и «name», но разные записи «value». Поэтому, когда я их объединяю, я добавляю строки для каждой возможной комбинации, которая быстро выходит из-под контроля. Самое разочаровывающее, что ни один из этих дубликатов не интересует меня вообще. Есть ли простой способ принять значение для первой записи и просто игнорировать любые повторяющиеся записи?
Спасибо!
Хмм, я не думаю, что объяснил это достаточно хорошо. Моя конечная цель - это кадр данных с столбцами «id», «name», а затем 150 столбцов для «значения» из каждого из 150 файлов. Если файл имеет значение для этого «id» «name» combo, я хочу его, если он не соответствует NA. Если я их складываю, удалите повторяющиеся записи «id» «name», не удаляю ли я связанные данные? – JRoon
См. Обновленный код и дайте мне знать, если это ближе к тому, что вы искали. – eipi10
Это близко. Я получаю несколько предупреждений: '> df = bind_rows (df)' Предупреждающие сообщения: 1: В rbind_all (x, .id): Неодинаковые уровни факторов: принуждение к символу 2: В rbind_all (x, .id): Неодинаковые уровни факторов: принуждение к символу '> df = dcast (df, id + name ~ source.file, value.var = "value")' Отсутствует функция агрегирования: по умолчанию длина. Результирующий блок данных структурирован правильно, но значения фактически являются подсчетами записей в каждом CSV-файле для этой строки, а не самими значениями. – JRoon