Я довольно новичок в R, но, похоже, это конкретная проблема, к которой я не смог найти ответ.R-rbind транспонирование одной колонки матрицы
Моя программа читает в некоторых данных, то rbinds определенных столбцов этих данных к одному из нескольких кадров данных на основе вектора чисел столбцов я прохожу его, так что-то вроде этого:
filename <- c("vector", "full", "of", "filenames")
colVal <- (32)
InMat <- data.frame()
for (i in 1:length(filename)){
file <- read.table(filename[i], header=TRUE, fill=TRUE, stringsAsFactors=FALSE)
InMat <- rbind(InMat, file[c(2:dim(file)[1], colVal)])
#...other matricies...
}
Моей проблема заключается в случае, когда имеется только один желаемый столбец, то есть colVal принимает одно значение. В этом случае я считаю, что InMat существенно переносится из того, что мне потребуется. Хуже того, когда я читаю файлы в mulitple, он привязывает транспонированный нужный столбец, поэтому я получаю количество строк, равное количеству файлов, которые я читаю, с таким количеством столбцов, сколько строк в каждом столбце каждого файла.
Похоже, что если имеется 2 желаемых столбца (то есть colVal принимает два или более значений), то он действует так, как я ожидаю (т.е. столбец считывается и сохраняется в InMat в качестве столбца, сохраняются столбцы из каждого дополнительного файла ниже).
Мой вопрос в том, почему rbind действует по-разному, когда ему передается только одно требуемое значение столбца, и если есть простой способ (читай, не добавляя какой-нибудь неуклюжий цикл if или для проверки), чтобы избежать этого?
Спасибо!
Кажется хорошо работать, хотя по какой-то причине мой код работает медленнее –
Какая часть делает ваш код медленнее? –
Если я запустил код в консоли R GUI, похоже, что он замедляется при первом вызове lapply. Он останавливается на 2-5 секунд или около того. (FYI Я использую ваш второй предложенный бит кода). –