Разделить данные на именованные векторы - PullRequest
2 голосов
/ 03 марта 2020

У меня есть такой фрейм данных:

set.seed(123)
df <- data.frame(item = rep(c("Item1", "Item2"), c(3, 4)),
                 id = c(LETTERS[1:3], LETTERS[23:26]),
                 x = sample(7))

#    item id x
# 1 Item1  A 7
# 2 Item1  B 3
# 3 Item1  C 6
# 4 Item2  W 2
# 5 Item2  X 4
# 6 Item2  Y 5
# 7 Item2  Z 1

Как разделить данные на 2 именованных вектора и сохранить их в списке? В идеале имена списка Item1 и Item2. Мой ожидаемый результат:

# $Item1
# A B C 
# 7 3 6 
# 
# $Item2
# W X Y Z 
# 2 4 5 1 

1 Ответ

2 голосов
/ 03 марта 2020

Мы можем использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...