Использование Reduce для объединения нескольких CSV-файлов с более чем одним столбцом в качестве условия и различной длины - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь создать один фрейм данных из 87 файлов .cvs, используя 3 общих столбца во всех файлах Excel.Общими являются следующие столбцы: Date CowID Time, но файлы содержат несколько столбцов, которые не являются общими, но которые необходимо объединить.Каждый файл также имеет разную длину, поэтому я думаю, что в финальном data.frame будет много NA.У меня нет проблем с чтением файлов.Я нашел код для этого, используя Объединение нескольких data.frames в один data.frame с циклом .

filenames <- list.files(path= "...\\data\\dat_merge", full.names=TRUE)
library(plyr)
import.list <- llply(filenames, read.csv)
data <- Reduce(function(x, y) merge(x, y, all=TRUE, 
                                    by.x=c("Date", "CowID", "Time"),             
                                    by.y=c("Date", "CowID", "Time")),
                                    import.list, accumulate=F)`

Однако, когда я попытался объединить файлы, используя reduce, я получил ошибку:

Ошибка в fix.by (by.y, y): 'by'должен указывать уникально допустимый столбец

Я не знаю, если проблема в том, что один из общих столбцов - это дата, и это символ, например, 24.11.2008.

Я пытался использовать x <- multimerge(my_data, all = TRUE, by=c("Date", "CowID", "Time")), но он тоже не работает

1 Ответ

0 голосов
/ 03 декабря 2018

Вот как я бы решил: используйте lapply, чтобы прочитать все файлы и извлечь только нужные столбцы.Затем используйте do.call ("rbind",) для объединения фреймов данных.

data=do.call("rbind",lapply(filenames,function(f){
        temp=read.csv(f)
        temp=temp[,c("Date", "CowID", "Time")]
        return(temp)
    }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...