Как разделить столбец dataframe по первому экземпляру символа в его значениях - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть фрейм данных (или вектор?)

x <- data.frame(a=c("A_B_D", "B_C"))

Я хочу разделить вектор в x$a на два новых столбца первым экземпляром "_", чтобы получить

x$b 
[1] "A" "B_D"

и

x$c
[2] "B" "C"

Я попробовал варианты gsub, но не смог найти решение.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Одна идея состоит в том, чтобы заменить первый _ другим разделителем и разделить его на новый разделитель.Это работает, потому что использование sub заменит только первый найденный разделитель (тогда как gsub заменяет все), т.е.

strsplit(sub('_', ',', x$a), ',', fixed = TRUE)
#[[1]]
#[1] "A"   "B_D"

#[[2]]
#[1] "B" "C"

Чтобы создать два новых столбца в исходном фрейме данных,

within(x, new <- data.frame(do.call(rbind, strsplit(sub('_', ',', x$a), ',', fixed = TRUE))))
#      a new.X1 new.X2
#1 A_B_D      A    B_D
#2   B_C      B      C
1 голос
/ 18 апреля 2019

Другим вариантом может быть использование tidyr::separate:

separate(x,a,into = c("b","c"),sep = "_",remove = FALSE,extra = "merge")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...