Использование grep / gsub для поиска только первого двоеточия - PullRequest
1 голос
/ 27 сентября 2011

У меня длинный файл, который записан ТОЛЬКО в один столбец.
Этот столбец содержит имена генов, за которыми следует двоеточие (:), затем название фрагмента микроРНК. К сожалению, имя микроРНК МОЖЕТ ТАКЖЕ содержать двоеточие (:).

Я хочу заменить ТОЛЬКО первое двоеточие на табуляцию (\ t) и затем write.table для получения двух столбцов в R.

Вот типичная выборка одного генного имени с несколькими микроРНК:

CHD5:miR-329/362-3p:2
CHD5:miR-329/362-3p:1
CHD5:miR-30a/30a-5p/30b/30b-5p/30cde/384-5p
CHD5:miR-15/16/195/424/497
CHD5:miR-26ab/1297
CHD5:miR-17-5p/20/93.mr/106/519.d
CHD5:miR-130/301
CHD5:miR-19
CHD5:miR-204/211

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 27 сентября 2011

Вот немного более полный пример, если у вас есть свой «inFile» и вы хотите «outFile» ...

lines <- readLines('inFile')
lines <- sub(':', '\t', x)
writeLines(lines, 'outFile')
3 голосов
/ 27 сентября 2011

Может быть, использовать sub вместо gsub?

2 голосов
/ 27 сентября 2011

Если вы все в порядке с sed, вы можете сделать следующее (при условии, что ваши данные находятся в файле с именем data.txt).

sed 's/\([^:]\):/\1 /' data.txt

Этот пробел после \1 действительно является вкладкой. Чтобы вставить его в мою оболочку, мне нужно было выполнить Ctrl-v, .

Вот мой результат после выполнения команды:

CHD5    miR-329/362-3p:2
CHD5    miR-329/362-3p:1
CHD5    miR-30a/30a-5p/30b/30b-5p/30cde/384-5p
CHD5    miR-15/16/195/424/497
CHD5    miR-26ab/1297
CHD5    miR-17-5p/20/93.mr/106/519.d
CHD5    miR-130/301
CHD5    miR-19
CHD5    miR-204/211
2 голосов
/ 27 сентября 2011

Если x - ваш столбец или вектор:

sub(":", "\t", x)

См. ?sub, где написано

‘sub’ и ‘gsub’ выполняют замену первого и всех совпадений соответственно.

...