Мы можем rep
лицензировать 'column_1' с помощью lengths
из list
вывода из strsplit
, а затем выполнить paste
lst1 <- strsplit(df$column_2, ",")
paste0(rep(df$column_1, lengths(lst1)), unlist(lst1))
#[1] "Aw" "Ax" "Bz" "Cq" "Cr" "Cs"
ПРИМЕЧАНИЕ. Выше приведена векторизацияподход, поскольку мы не перебираем list
Или используем stack
для создания двухколоночного data.frame из list
, а затем paste
do.call(paste0, stack(setNames(lst1, df$column_1))[2:1])
#[1] "Aw" "Ax" "Bz" "Cq" "Cr" "Cs"
stack
При использовании подхода с двумя столбцами data.frame может быть немного менее эффективным по сравнению с первым подходом
Или с tidyverse
, разделить 'column_2' на длинный формат с separate_rows
, затем unite
двух столбцов и pull
до vector
library(tidyverse)
df %>%
separate_rows(column_2) %>%
unite(newcol, column_1, column_2, sep="") %>%
pull(newcol)
#[1] "Aw" "Ax" "Bz" "Cq" "Cr" "Cs"
Проблема в подходе ОП основана на том факте, что вывод strsplit
является list
из vector
с.Нам нужна функция для циклического перебора list
(lapply/sapply/vapply
) или unlist
list
в vector
, тогда как replicating the
'column_1' (чтобы сделать length
во время paste
ing)
данные
df <- structure(list(column_1 = c("A", "B", "C"), column_2 = c("w,x",
"z", "q,r,s")), class = "data.frame", row.names = c(NA, -3L))