Nano Hash - криптовалюты, майнинг, программирование

Создание таблицы подсчета на основе каждого значения в каждом столбце в R

У меня есть таблица данных, которая начинается так:

    test <- data.frame("AZ" = c("ABCD, AAAA, BBBB"), "AK" = c("ABCD"), "NJ" = c("BBBC", "AAAA"))

Каждый столбец — это штат (Аризона, Аляска, Нью-Джерси), а значения в этих столбцах — это коды. Если в одной ячейке более одного кода, они будут разделены запятой.

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

    test2 <- data.frame("ABCD" = c("2", "2", "0"), "AAAA" = c("2", "0", "1"), "BBBB" = c("2", "0", "0"), "BBBC" = c("0", "0", "1"), row.names = c("AZ", "AK", "NJ"))

Есть ли способ получить такую ​​​​таблицу для вывода в R? Я играл с dplyr, но пока безуспешно. Спасибо за помощь :)

28.04.2019

Ответы:


1

Мы можем gather перевести в «длинный» формат, затем разделить «значение» на разделитель , с помощью separate_rows, получить частоту с помощью count, spread в «широкий» формат.

library(tidyverse)
gather(test) %>% 
   separate_rows(value) %>% 
   count(key, value) %>%
   spread(value, n, fill = 0) %>%
   column_to_rownames('key')
#   AAAA ABCD BBBB BBBC
#AK    0    2    0    0
#AZ    2    2    2    0
#NJ    1    0    0    1

ПРИМЕЧАНИЕ. Если нам нужен вывод в «длинном» формате, нет необходимости spread

gather(test) %>% 
    separate_rows(value) %>% 
    count(key, value)
# A tibble: 6 x 3
#  key   value     n
#  <chr> <chr> <int>
#1 AK    ABCD      2
#2 AZ    AAAA      2
#3 AZ    ABCD      2
#4 AZ    BBBB      2
#5 NJ    AAAA      1
#6 NJ    BBBC      1

Обновлять

если нам также нужно сгруппировать по «строке», создайте столбец row_number(), затем сделайте gather в «длинном» формате и count в столбце «ключ» и «rn» united

test %>%
   mutate(rn = row_number()) %>% 
   gather(key, val, -rn) %>%
   separate_rows(val) %>% 
   unite(key, key, rn) %>% 
   count(key, val) %>% 
   spread(val, n, fill = 0) %>%
   column_to_rownames('key')
#      AAAA ABCD BBBB BBBC
#AK_1    0    1    0    0
#AK_2    0    1    0    0
#AZ_1    1    1    1    0
#AZ_2    1    1    1    0
#NJ_1    0    0    0    1
#NJ_2    1    0    0    0

Или используя base R

table(stack(lapply(test, function(x) unlist(strsplit(as.character(x), ", "))))[2:1])
28.04.2019
  • Потрясающий! Большое спасибо. Есть ли быстрый способ отредактировать этот код, чтобы получить количество каждой комбинации строки/столбца? Так что в итоге это будет выглядеть так?: 29.04.2019
  • @SamanthaSullivan Если вам нужно это в длинном формате, вам нужно остановиться на шаге count и не делать spread 29.04.2019
  • Есть ли способ получить такой вывод? test2 ‹- data.frame(ABCD = c(1, 1, 1, 1, 0, 0), AAAA = c(1, 1, 0, 0, 0, 1), BBBB = c(1, 1, 0) , 0, 0, 0), BBBC = c(0, 0, 0, 0, 1, 0), row.names = c(AZ_1, AZ_2, AK_1, AK_2, NJ_1, NJ_2)) 29.04.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..