Мне дали один из тех эпических примеров Excel.В широкой таблице указана емкость для пар продуктов (в строках) и машин (в столбцах).Таблица выглядит аналогично приведенной в следующем воспроизводимом примере (обратите внимание на использование решений data.table
. data.frame
/ tidyverse, хотя предпочтительны решения data.table
):
a <- data.table(names = c("product 1", "product 2"), "9-10" = c(1, 5), "21-23" = c(3, 2))
> a
names 9-10 21-23
1: product 1 1 3
2: product 2 5 2
Проблема «9-10» означает, что машины 9 и 10 имеют одинаковую производительность (1 и 5 для продуктов 1 и 2 соответственно).Я ищу способ закончить с таблицей, которая выглядит как b
:
> b
names 9 10 21 23
1: product 1 1 1 3 3
2: product 2 5 5 2 2
Я добился этого с помощью следующего кода:
for (i in unlist(strsplit(names(a)[2:3], split = "-", fixed = TRUE))){
a[, print(i) := .SD, .SDcols = grep(paste0(i, "\\b"), names(a)[2:3], value = TRUE)]
}
a[, names(a)[2:3] := NULL]
Интересно, что будетболее чистый способ сделать это.