R, извлекать столбцы как векторы из сгруппированного фрейма данных - PullRequest
0 голосов
/ 29 августа 2018

Представьте, что у вас есть этот фрейм данных

x <- c("a1", "a2", "a3", "a4", "a1", "a2", "a3", "a4")

y <- c("red", "yellow", "blue", "green", "black", "pink", "purple", 
"orange")

df <- data.frame(x, y, stringsAsFactors = FALSE)

Я не могу придумать способ, предпочтительно использовать dplyr, чтобы извлечь столбец y после группировки фрейма данных. По сути, я хотел бы знать, какие цвета находятся в a1, в a2, в a3 и в a4, и сохранить эти результаты как отдельные векторы, в идеале в виде списка.

Я мог бы сделать

colors.in.a1 <- df %>% filter(x == "a1") %>% pull(y)

для каждого из a1, a2, a3, a4, но это заняло бы некоторое время с моими реальными данными. Я надеялся, что pull() будет вести себя как tally(), возможно, вернет список векторов, которые названы на основе переменной группировки, но это не так.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Другое решение с использованием dplyr и purrr:

library(dplyr)
library(purrr)

df %>% 
  split(.$x) %>% 
  map(pull, y)
$a1
[1] "red"   "black"

$a2
[1] "yellow" "pink"  

$a3
[1] "blue"   "purple"

$a4
[1] "green"  "orange"

Данные:

df <- structure(list(x = c("a1", "a2", "a3", "a4", "a1", "a2", "a3", 
"a4"), y = c("red", "yellow", "blue", "green", "black", "pink", 
"purple", "orange")), class = "data.frame", row.names = c(NA, 
-8L))
0 голосов
/ 29 августа 2018

Только с Base R (благодаря комментарию @ thelatemail):

split(df$y, df$x)

или мы можем использовать nest:

library(tidyverse)

df %>%
  group_by(x) %>%
  nest() %>%
  mutate(data = data %>% map(pull, y)) %>%
  pull(data) %>%
  setNames(unique(x))

Результат:

$a1
[1] "red"   "black"

$a2
[1] "yellow" "pink"  

$a3
[1] "blue"   "purple"

$a4
[1] "green"  "orange"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...