У меня есть задача сделать функцию, которая принимает путь к каталогу, читает много файлов .csv и возвращает data.frame с числом полных случаев для каждого файла в виде:Подсчитать строки в кадре данных по факторам, сохранить порядок?
## id nobs
## 1 2 1041
## 2 4 474
## 3 8 192
## 4 10 148
## 5 12 96
я следующее решение (функция подписи дается):
complete <- function(directory, id = 1:332) {
myFiles <- list.files(path=directory,pattern=".csv",recursive=T,full.names=T)
data <- lapply(myFiles[id],read.csv)
frame <- do.call("rbind",data)
frame <- frame[complete.cases(frame),]
frame$ID <- factor(frame$ID, ordered=T)
by <- by(frame,frame$ID,nrow,simplify=F)
complete <- data.frame(id=names(by),nobs=unlist(by))
return(complete)
}
Это дает мне правильный выход, за исключением одного situtation. Если вызов функции - это что-то вроде complete(directory, 30:25)
, то ожидается, что порядок столбца data.frame id
сохраняется (здесь 30,29 и т. Д.). Но это не удается, потому что by
сортирует выходной список по факторам. Есть ли лучшее решение для моей проблемы (с использованием стандартных пакетов)? Или я могу заблокировать заказ?
Спасибо за ваш ответ. Да, у меня было неправильное представление о функции параметра «odered». Когда я использую 'frame $ ID <- factor (frame $ ID, levels = unique (frame $ ID))' Я привожу его для корректной работы, но есть и другая проблема. При вводе типа 'c (2, 4, 8, 10, 12)' сгенерированный data.frame имеет id-значения в его поле row.names. Вместо 1,2,3,4,5 сейчас 2,4,8,10,12 (я должен выполнить полный тест). Остальные части (id, nobs) теперь правильные. –
@Meiner Ну, вы устанавливаете идентификаторы с помощью data.frame (id = names (by), nobs = unlist (by)) ', поэтому вместо использования' names (by) 'just do' id = 1: length () или что-то в этом роде. – MrFlick
Поле 'id' правильно. Я имею в виду числа в самом левом столбце при печати data.frame (без имени столбца). Я должен установить 'row.names = NULL', тогда он работает так, как ожидалось. Перед изменением мне не пришлось делать что-то подобное. –