разделить набор данных на основе нескольких столбцов в R - PullRequest
1 голос
/ 08 июля 2019

У меня есть фрейм данных и вектор, и я хочу разделить фрейм данных на несколько списков, если значение появляется в векторе.

Например, вот вектор:

foods_to_serve <- c("Sweets", "Bitter")

Вот кадр данных:

library(tidyverse)
problem <- tibble(name = c("Angela", "Claire", "Justin", "Rachel"), 
                  favfood1 = c("Sweets", "Salty", "Sweets", "Salty"), 
                  favfood2 = c("Bitter", "Sweets", "Salty", NA), 
                  favfood3 = c("Salty", NA, NA, NA), 
                  hunger = c("high", "high", "low", "low"))

Я хочу, чтобы R разбил это на списки, включающие только те продукты, которые указаны в списке продуктов для подачи.Кроме того, люди могут входить в несколько списков, а некоторые могут быть полностью исключены.

Чтобы быть более конкретным, я бы получил список, который выглядит следующим образом:

[1] 
Food_to_serve  name      hunger
Sweets        Angela     high
Sweets        Claire     high
Sweets        Justin     low

[2]
Food_to_serve  name      hunger
Bitter         Angela    high

Я знаю, что яМожно использовать split (), но я не уверен, как сделать так, чтобы он повторялся по этим различным столбцам.Я думаю, что мне может понадобиться использовать функцию pmap из purrr, но я не уверен.Я не возражаю, если окончательные списки сохранятся, если что-то было их первым, вторым или третьим любимым продуктом, но мне нужно, чтобы остальная информация была включена в исходный фрейм данных.Если возможно, было бы полезно аккуратное решение.

Я также пытался использовать% в%, но я также не знаю, как заставить его проходить через несколько столбцов.

1 Ответ

4 голосов
/ 08 июля 2019

Может быть, что-то вроде этого:

library(dplyr)
library(tidyr)
gather(problem,key = favfood,value = type,favfood1:favfood3,na.rm = TRUE) %>% 
  filter(type %in% foods_to_serve) %>% 
  group_split(type)

Обратите внимание, что group_split все еще помечен как экспериментальный, поэтому его поведение может измениться в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...