Для назначения я написал функцию с «id» в качестве аргумента, в которой я создаю нулевой кадр данных, а затем в цикле for считывает количество полных случаев (без NA) в серии файлов CSV. Это дает мне фрейм данных «dat» с двумя столбцами (id, # complete cases), которые я проверил. Теперь у меня возникли проблемы с подмножеством, основанным на аргументе id. Я должен быть в состоянии подмножества на колонке 1, которое эквивалентно ID:R подмножество данных по столбцу
dat[which(dat[, 1] %in% id),]
но при запуске этой функции, ничего не возвращается (нет выхода, нет ошибки). После некоторого поиска на этом сайте и других, я попытался назвать столбцы, когда я создал фрейм данных, чтобы иметь что-то называть столбец в Подменю:
dat <- data.frame("monitor"=integer(), "nobs"=integer())
dat_subset <- dat[which(dat[, "monitor"] %in% id),]
но это возвращает «неопределенные столбцы, выбранные». Так что я попытался указать мой кадр данных другой способ:
dat <- data.frame(ncol=2)
colnames(dat) <- c("ID", "nobs")
, но это дает атрибут «имен» Ошибка [2] должна быть такой же длины, как и вектор [1]. Что такое вектор длины 1? Разве я не запрашивал 2-х столбцовый фрейм данных?
Может ли кто-нибудь помочь мне отладить любые из этих параметров? Большое спасибо!
Редактировать на основе обратной связи: Я правильно инициализирован фреймом данных (благодаря комментариям). dat < - data.frame ("ID" = integer (0), "nobs" = integer (0)) Str(dat)
показывает, что я сделал это правильно 'data.frame': 0 obs. от 2-х переменных: $ ID: ИНТ $ Ноббс: Int Таким образом, кажется, что моя проблема заключается в цикл, который следует, так как с помощью str(dat)
после цикла показывает имена столбцов были сняты:
for (i in 1:332) {
nobs <- sum(complete.cases(read.csv(files_list[i])))
rowvector <- c(i,nobs)
dat <- rbind(dat, rowvector)
}
'data.frame': 332 obs. of 2 variables:
$ X1L : int 1 2 3 4 5 6 7 8 9 10 ...
$ X117L: int 117 1041 243 474 402 228 442 192 275 148 ...
Почему имена не прилипают при добавлении строк в фрейм данных? ?rbind
утверждает, что «имена столбцов берутся из первого аргумента с соответствующими именами».
См. '? Data.frame'. В функции нет аргумента 'ncol'. Если вы используете 'data.frame (ncol = 2)' и распечатываете его, вы увидите 'data.frame' со столбцом с именем' ncol'. – JasonWang
есть много понятий для объяснения здесь. слишком широкий вопрос. Одна ошибка, которую я могу найти, - это то, что [, 1] возвращает data.frame, и вы можете использовать аргумент 'drop = TRUE', чтобы сделать его вектором –