Установка сцены:R: Транспонирование таблицы результатов а и добавить заголовки столбцов
Так у меня есть каталог с 50 .csv файлов в ней.
Все файлы имеют уникальные имена, например. 1.csv 2.csv ...
Содержание каждого может изменяться по количеству строк, но всегда есть 4 колонки
Заголовки столбцов:
- Дата
- Результат 1
- Результат 2
- ID
Я хочу, чтобы все они были объединены в один фрейм данных (mydf), а затем я хотел бы игнорировать любые строки, где есть значение NA.
Чтобы я мог подсчитать, сколько полных экземпляров «ID» было. Например, позвонив;
- MyFunc ("my_files", 1)
- MyFunc ("my_files", с (2,4,6))
Мой код до сих пор:
myfunc <- function(directory, id = 1:50) {
files_list <- list.files(directory, full.names=T)
mydf <- data.frame()
for (i in 1:50) {
mydf <- rbind(mydf, read.csv(files_list[i]))
}
mydf_subset <- mydf[which(mydf[, "ID"] %in% id),]
mydf_subna <- na.omit(mydf_subset)
table(mydf_subna$ID)
}
Мои вопросы и где мне нужна помощь:
Мои результаты вышли таким образом
2 4 6
200 400 600
, и я бы хотел, чтобы они были такими, чтобы они были такими. Я не уверен, правильно ли вызывается таблица, или я должен назвать ее as.matrix, возможно?
2 100
4 400
8 600
Я хотел бы также иметь либо заголовки из исходных файлов или назначить новые
ID Count
2 100
4 400
8 600
Любые и все советы приветствуются
Matt
Дополнение
Я попытался внести изменения в некоторые полезные комментарии ниже, поэтому у меня также есть набор кода, который выглядит так:
myfunc <- function(directory, id = 1:50) {
files_list <- list.files(directory, full.names=T)
mydf <- data.frame()
for (i in 1:50) {
mydf <- rbind(mydf, read.csv(files_list[i]))
}
mydf_subset <- mydf[which(mydf[, "ID"] %in% id),]
mydf_subna <- na.omit(mydf_subset)
result <- data.frame(mydf_subna$ID)
transposed_result <- t(result)
colnames(transposed_result) <- c("ID","Count")
}
, который я пытаюсь позвонить с этим:
myfunc("myfiles", 1)
myfunc("myfiles", c(2, 4, 6))
, но я получаю эту ошибку
> myfunc("myfiles", c(2, 4, 6))
Error in `colnames<-`(`*tmp*`, value = c("ID", "Count")) :
length of 'dimnames' [2] not equal to array extent
Интересно, если возможно, я не создаю эту data.frame правильно и должно использовать cbind или не суммировать строки по ID, может быть?
Привет @ Kanal-пури, спасибо за быстрый ответ. Я создал функцию ** Myfunc **, в которой у него есть пустой data.frame ** mydf **, это добавляет к нему все прикрепленные файлы. Затем я подмножаю его, чтобы иметь только значение ID, которое я указываю, когда я его вызываю через некоторое время, но я также опускаю любые значения NA и сохраняю это ** mydf_subna **. Именно эту переменную я помещаю в таблицу. Если мой эквивалент вашего ** ans2 ** будет ** mydf_subna ** – Mchapple
Он должен быть эквивалентен значению, возвращаемому функцией, например. '2 4 6 200 400 600'. См. Редактирование. –