Предполагая, что вам удалось открыть файл и при условии, что это data.frame
с factor
столбцов, вы можете использовать тот факт, что факторы уже числовые столбцы, пронумерованных от 1
:
DF <- read.table(text = "ID1 ID2 ID3 ID4 ID5
SNP1 AA AA AB AA BB
SNP2 AB AA BB AA AA
SNP3 BB BB BB AB BB
SNP4 AA AB BB BB AA
SNP5 AA AA AA AA AA
", header = TRUE, sep = "")
for (i in seq_along(DF)) {
# check if the column levels are ordered correctly; if not
# relevel the column
if (!identical(levels(DF[[i]]), c("AA", "AB", "BB"))) {
warning("Levels do not match in column ", i, ". Relevelling.")
DF[[i]] <- factor(DF[[i]], levels=c("AA", "AB", "BB"))
}
# remove the class of the column: this basically makes an integer
# column from the factor
attr(DF[[i]], "class") <- NULL
# substract 1 to get number from 0
DF[[i]] <- DF[[i]] - 1
}
проверяет код, если уровни нумеруются правильно и при необходимости сбрасываются. Надеюсь, этого не происходит часто, так как это замедлит работу.
Возможно, ваш файл не вписывается в память, что приведет к тому, что Windows/Linux/... будет использовать диск для хранения данных. Это значительно замедлит работу. В этом случае вам, вероятно, лучше использовать такие пакеты, как ff
или bigmemory
.
С данными такого размера у вас может возникнуть проблема с импортом в R. Возможно, использование некоторых инструментов командной строки, таких как 'sed', может быть намного быстрее. Кроме того, посмотрели ли вы на Bioconductor, если вы работаете с данными генома? – thelatemail
...или редактор, например 'EmEditor', если вы работаете в Windows. Это не бесплатно, а бесплатный пробный период. Он отлично справляется с этими ситуациями. –