Мы можем использовать split
для именованного вектора, созданного из столбцов 'x' и 'id'
with(df, split(setNames(x, id), item))
#$Item1
#A B C
#7 3 6
#$Item2
#W X Y Z
#2 4 5 1
Параметр Tidyverse - group_split
и deframe
library(dplyr)
library(purrr)
library(tibble)
df %>%
group_split(item, keep = FALSE) %>%
map(deframe)
Или в версии devel dplyr
df %>%
group_by(item) %>%
condense(new = deframe(cur_data())) %>%
pull(new)