Опция будет separate
library(tidyverse)
df %>%
separate(seq, into = paste0("x", 1:3), sep = c(3, 6))
# id x1 x2 x3
#1 1 ABC DEF GHI
#2 2 ZAB CDJ HIA
Если мы хотим сделать его более общим
n1 <- nchar(as.character(df$seq[1])) - 3
s1 <- seq(3, n1, by = 3)
nm1 <- paste0("x", seq_len(length(s1) +1))
df %>%
separate(seq, into = nm1, sep = s1)
Или, используя base R
, используя strsplit
, разделите столбец 'seq' для каждого экземпляра из 3 символов, передавая выражение поиска регулярных выражений в list
, а затем rbind
элементы list
df[paste0("x", 1:3)] <- do.call(rbind,
strsplit(as.character(df$seq), "(?<=.{3})", perl = TRUE))
ПРИМЕЧАНИЕ. Лучше избегать имен столбцов, начинающихся с нестандартных меток, таких как цифры. По этой причине в начале названия добавляется 'x'