Извлечение частей из текста с вертикальной чертой в г - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно создать три переменные из текста, включая вертикальные полосы. Первой переменной должны быть буквы до первой вертикальной черты. Вторая переменная должна представлять собой комбинацию цифр и букв между двумя вертикальными чертами, а третья переменная должна быть информацией после «ADE».

Я не очень знаком с выражениями, поэтому попробовал пару и потерпел неудачу.

Вот три точки данных:

dat <- as.data.frame(c("A|3.ABC|ADE.5.26D","AB|3.ABD|ADE.5.26","B|3.BCD|ADE.5.45BD"))
colnames(dat) <- "text"

> dat
                text
1  A|3.ABC|ADE.5.26D
2  AB|3.ABD|ADE.5.26
3 B|3.BCD|ADE.5.45BD

Я ожидаю, что результат будет

v1 V2   V3
A  3.ABC 5.26D
AB 3.ABD 5.26
B  3.BCD 5.45BD

Спасибо!

Ответы [ 3 ]

1 голос
/ 22 мая 2019

Прочитайте столбец с read.table, но помните, что это были факторы, поэтому сначала преобразуйте в символ:

 dat2 <- read.table(text=as.character(dat$text), sep="|")

> dat2
  V1    V2         V3
1  A 3.ABC  ADE.5.26D
2 AB 3.ABD   ADE.5.26
3  B 3.BCD ADE.5.45BD

Чтобы удалить ADE.используйте sub

dat2$V3 <- sub("ADE\\.", '', dat2$V3)
1 голос
/ 22 мая 2019

Использование функции str_split из пакета stringr:

as.data.frame(stringr::str_split(dat$text, '\\|', simplify = T))
  V1    V2         V3
1  A 3.ABC  ADE.5.26D
2 AB 3.ABD   ADE.5.26
3  B 3.BCD ADE.5.45BD
0 голосов
/ 23 мая 2019

Просто другой подход:

dat <- as.data.frame(c("A|3.ABC|ADE.5.26D","AB|3.ABD|ADE.5.26","B|3.BCD|ADE.5.45BD"))
colnames(dat) <- "text"
tidyr::separate(dat, "text", into = paste0("V", 1:3), sep = "\\|") %>%
dplyr::mutate(V3 = gsub("ADE.", "", V3))

...