1) strcapture Предполагая, что первое поле не числовое (\\D+
), второе - числовое (\\d+
), а третье не числовое (\\D+
), мы можем используйте stracapture
из базы R. Если бы мы знали, что поля имеют фиксированную ширину, мы могли бы использовать шаблон (.)(...)(.)
вместо.
# pat <- "(.)(...)(.)" # alternative if fields fixed width
pat <- "(\\D+)(\\d+)(\\D+)"
strcapture(pat, muts, list(Ref = character(0), Pos = integer(0), Alt = character(0)))
предоставление этих данных. Кадр:
Ref Pos Alt
1 S 267 P
2 W 290 *
3 K 650 Q
1a) read.pattern read.pattern
в пакете gsubfn чем-то напоминает решение strcapture
, использующее тот же шаблон, но не требующее явной типизации полей. Это дает тот же результат. pat
определено в (1).
library(gsubfn)
read.pattern(text = muts, pattern = pat, as.is = TRUE,
col.names = c("Ref", "Pos", "Alt"))
2) read.table Используя те же предположения, что и (1), мы можем вставить пробел с любой стороны числовой части и затем прочитать его, используя read.table
. Это также базовое решение, дающее тот же результат, что и выше.
read.table(text = sub("(\\d+)", " \\1 ", muts), as.is = TRUE,
col.names = c("Ref", "Pos", "Alt"))
3) read.fwf Предполагая, что поля имеют фиксированную ширину, мы можем использовать read.fwf
от базы R. Вывод такой же, как и выше. Регулярные выражения не используются.
read.fwf(textConnection(muts), c(1, 3, 1), as.is = TRUE,
col.names = c("Ref", "Pos", "Alt"))
дает:
Ref Pos Alt
1 S 267 P
2 W 290 *
3 K 650 Q
4) substr Еще одно базовое решение, использующее те же допущения, что и (3), и выдающее тот же результат, что и выше:
data.frame(Ref = substr(muts, 1, 1),
Pos = as.integer(substr(muts, 2, 4)),
Alt = substr(muts, 5, 5),
stringsAsFactors = FALSE)
5) отдельное Предполагая, что поля находятся в фиксированных положениях, мы можем использовать пакет тидира separate
. Опять же, регулярные выражения не используются.
library(dplyr)
library(tidyr)
library(tibble)
tibble(muts) %>%
separate(muts, into = c("Ref", "Pos", "Alt"), sep = c(1, 4, 5))
дает:
# A tibble: 3 x 3
Ref Pos Alt
<chr> <chr> <chr>
1 S 267 P
2 W 290 *
3 K 650 Q