Вот один из способов:
Сначала давайте создадим фиктивные данные примера, используя data.table::fread
library(data.table)
dt = fread(
"a b c,d e f,g,h
1 2 3 4 5
1 2 3 4 5", sep=' ')
# a b c,d e f,g,h
#1: 1 2 3 4 5
#2: 1 2 3 4 5
cols = names(dt)
Теперь мы используем stringr
для подсчета вхождений запятых в именах и добавлениястолбцы соответственно.Мы используем повторное использование в операторе matrix
, чтобы заполнить новые смежные столбцы одинаковыми значениями
library(stringr)
dt.new = dt[, lapply(cols, function(x) matrix(get(x), NROW(dt), str_count(x, ',')+1L))]
names(dt.new) <- unlist(strsplit(cols, ','))
dt.new
# a b c d e f g h
# 1: 1 2 3 3 4 5 5 5
# 2: 1 2 3 3 4 5 5 5
Аналогично, если вы предпочитаете использовать базовую data.frame
вместо data.table
, мы можем вместо этого сделать
dt.new = data.frame(lapply(cols, function(x) matrix(dt[[x]], NROW(dt), str_count(x,',')+1L)))
names(dt.new) <- unlist(strsplit(cols, ','))