1) тидир :: Отдельные_строки Попробуйте separate_rows
в тидыре:
library(dplyr)
library(tidyr)
df.0 %>% separate_rows(names)
, дающие:
bill names
1 HB1 a
2 HB1 b
3 HB2 a
1а) тидир ::unnest Можно создать другое решение тидира из strsplit
и unnest
:
df.0 %>%
mutate(names = strsplit(names, "\\s+")) %>%
unnest
, дающее:
bill names
1 HB1 a
2 HB1 b
3 HB2 a
2) стек / strsplit Эта альтернатива не использует пакеты.Здесь мы используем strsplit
, чтобы разбить names
на список символьных векторов.Добавьте к этому bill
имен и используйте stack
, чтобы связать это с данными.stack
даст ему жестко закодированные имена, поэтому используйте setNames
, чтобы установить имена обратно.
setNames(with(df.0, stack(setNames(strsplit(names, "\\s+"), bill)))[2:1], names(df.0))
давая:
bill names
1 HB1 a
2 HB1 b
3 HB2 a