R: как получить информацию из текстового файла с помощью R - PullRequest
2 голосов
/ 31 мая 2011

R экспертов,

У меня большой текстовый файл, который имеет определенный шаблон и формат.

Мой text.txt содержит

x1 `xx`nkkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakd`xx`nmm  cataitha`yy`knkcnaktnhakt

x2 `xx`ngkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm  cataithaknkcnaktnhakt 

x3 `xx`nkg,kna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm  cataithaknk`xx`cna`yy`ktnhakt 

x4  nkkndataktnaknvcaklrhkahnktn, altlkhakthakdnmm  cataithaknkcnaktnhakt 

Затем я хочучтобы попросить R найти список слов, в данном случае это x1, x2, x3 и x4, а между ними я хочу получить список для каждого из них, то есть между «xx» и «yy».

Таким образом, результатом будет четыре списка

x1 = c("nkkna", "nmm  cataitha")
x2 = c("ngkna")
x3 = c("nkg,kna", "cna")
x4 = c("NA")

Однако я столкнулся с двумя проблемами, хотел бы попросить вас о помощи.

  • какчитать большой текстовый файл в R?Из stackoverflow я узнаю, что команда

x <- read.csv (textConnection "xxx") может помочь, но проблема в том, что мой файл слишком большой, чтобы его можно было скопировать и передать, и файл долженбыть прочитанным как CSV.Есть ли какой-нибудь гораздо лучший способ загрузить мой текстовый файл в R как объект, который впоследствии можно будет найти и выполнить grep? </p>

  • Как написать код, чтобы получить всю эту информацию?

Я узнаю, что strsplit может быть использован, похоже, что он работает на сломанных материалах RCurl, он тоже работает здесь?Если да, не могли бы вы научить меня как?

Большое вам спасибо .....

1 Ответ

8 голосов
/ 31 мая 2011

Чтобы ответить на ваш первый вопрос, чтобы прочитать текстовый файл, вы должны использовать функцию scan().Ссылки, которые вы видите на SO на textConnection, предназначены только для чтения в некоторых примерах данных, которые вставляются в консоль.Это то, что я делаю затем, чтобы прочитать ваши данные:

txt <- "
x1 `xx`nkkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakd`xx`nmm  cataitha`yy`knkcnaktnhakt
x2 `xx`ngkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm  cataithaknkcnaktnhakt 
x3 `xx`nkg,kna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm  cataithaknk`xx`cna`yy`ktnhakt 
x4  nkkndataktnaknvcaklrhkahnktn, altlkhakthakdnmm  cataithaknkcnaktnhakt"

dtxt <- textConnection(txt)

Затем я использую scan таким же образом, чтобы прочитать данные textConnetion.В своем собственном коде вы должны изменить следующую строку, чтобы tat dtxt был вашим местоположением файла.Я сохраняю его в этом формате, чтобы другие люди могли копировать мои результаты, не создавая файл в своей файловой системе:

dat <- scan(dtxt, what="character", sep="\n")

Теперь, когда вы прочитали данные, это (довольно сложно) вызовите sapply, strsplit и gsub для манипулирования данными.

sapply(seq_along(dat), 
    function(i)unlist(c(sapply(strsplit(dat[i], "`xx`"), 
              function(x)gsub("^(.*?)`.*", "\\1", x)[-1]))))

Результаты в точности соответствуют указанным вами:

[[1]]
[1] "nkkna"         "nmm  cataitha"

[[2]]
[1] "ngkna"

[[3]]
[1] "nkg,kna" "cna"    

[[4]]
character(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...