Вектор к фрейму данных, используя положение элемента вектора в качестве идентификационного номера

Предположим, у нас есть символьный вектор:

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)))
Другие вопросы по тегам