Чтобы сэкономить МАЛЕНЬКУЮ память / время, вы можете изменить решение @Ben Bolker следующим образом:
datlist <- lapply(csvnames,read.csv, colClasses=c("character", "NULL"))
rowseq <- seq_len( max(vapply(datlist,nrow, integer(1))) )
keylist <- lapply(datlist,function(x) { x[[1]][rowseq] ) })
names(keylist) <- paste(KEYTERMS,csvnames,sep="_")
#do.call(cbind,keylist)
do.call(data.frame,keylist)
... Я только что изменил так, чтобы читался только первый столбец, и упростил заполнение NA, наблюдая, что выбор последовательности, которая выходит за пределы векторных векторных символов автоматически с NA ...
Если вы сохранили старый способ заполнения, вы должны по крайней мере дополнить его NA_character_
вместо NA
, чтобы избежать ненужного принуждения.
Я также индексирую столбец KEYTERMS
по номеру вместо имени (так как должен быть только один). Я также изменил sapply
на vapply
, потому что он мне больше нравится :) - на самом деле он тоже быстрее.
Наконец вы сказали, что хотите data.frame
. Последняя строка выдает это вместо матрицы.