Создание таблицы счетчиков уникальных значений при наличии нескольких значений в одной ячейке с использованием R - PullRequest
1 голос
/ 26 апреля 2019

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

df <- data.frame("Spring" = c("skirt, pants, shirt", "tshirt"), "Summer" = 
c("shorts, skirt", "pants, shoes"), Fall = c("Scarf", "purse, pants"))

               Spring        Summer         Fall
1 skirt, pants, shirt shorts, skirt        Scarf
2              tshirt  pants, shoes purse, pants

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

output <- data.frame("Spring" = 4, "Summer" = 4, Fall = 3)

  Spring Summer Fall
1      4      4    3

Итак, я просто хотел бы посчитать уникальные значения в столбце для каждого сезона.У меня проблемы с этим из-за запятых, разделяющих значения в 1 ячейке.Я пытался использовать length (unique ())), но из-за столбцов он не дает правильное число.

Любая помощь приветствуется !!!

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Использование summarise_all:

getCount <- function(x) {
  x <- as.character(x)
  length(unique(unlist(strsplit(x, ","))))
}

library(dplyr)
df %>%
  summarise_all(funs(getCount))
  Spring Summer Fall
1      4      4    3
1 голос
/ 26 апреля 2019

Одна tidyverse возможность может быть:

df %>%
 mutate_if(is.factor, as.character) %>%
 gather(var, val) %>%
 mutate(val = strsplit(val, ", ")) %>%
 unnest() %>%
 group_by(var) %>%
 summarise(val = n_distinct(val))

  var      val
  <chr>  <int>
1 Fall       3
2 Spring     4
3 Summer     4

Если вы хотите точно соответствовать желаемому выводу, вы можете добавить spread():

df %>%
 mutate_if(is.factor, as.character) %>%
 gather(var, val) %>%
 mutate(val = strsplit(val, ", ")) %>%
 unnest() %>%
 group_by(var) %>%
 summarise(val = n_distinct(val)) %>%
 spread(var, val)

   Fall Spring Summer
  <int>  <int>  <int>
1     3      4      4

Или используяОсновная идея от @Sonny (для этого нужно просто dplyr):

df %>%
 mutate_if(is.factor, as.character) %>%
 summarise_all(list(~ n_distinct(unlist(strsplit(., ", ")))))

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