Вектор к фрейму данных, используя положение элемента вектора в качестве идентификационного номера
Предположим, у нас есть символьный вектор:
foo <- c("A;B;C", "B;C", "F;G;H")
Интересно, как сгенерировать следующий фрейм данных:
1 A
1 B
1 C
2 B
2 C
3 F
3 G
3 H
Обратите внимание, что числа в первом столбце обозначают положение компонента / элемента в символьном векторе foo
,
Моя первоначальная попытка выглядит следующим образом. я использую str_split()
функция от stringr
пакет для разделения элементов в foo
вектор:
> str_split(foo, pattern = ";")
[[1]]
[1] "A" "B" "C"
[[2]]
[1] "B" "C"
[[3]]
[1] "F" "G" "H"
Теперь, я думаю, лучшая идея состоит в том, чтобы использовать map
функция от purrr
пакет, но, к сожалению, я не знаю, как поступить.
1 ответ
Один вариант separate_rows
после создания data.frame
с индексом как последовательность 'foo'
library(tidyverse)
data.frame(ind = seq_along(foo), Col = foo) %>%
separate_rows(Col)
Или используя метод OP, разделите 'foo' на list
установите имена с последовательностью 'foo' и stack
в два столбца data.frame'
stack(setNames(str_split(foo, pattern = ";"), seq_along(foo)))