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

Разбор многозначных ячеек в перекрестные таблицы в R

У меня есть набор данных, который при импорте в формате CSV приводит к многозначным ячейкам для вопросов опроса, допускающих несколько ответов. Сопоставление однозначных ответов в R очень просто:

ctab(formula = col1 ~ col2, data = tmp) # given dataframe tmp

Но мне нужно сопоставить данные следующим образом:

tmp2 <- data.frame ( 
  "level" = c ( "dir" ,    "mgr" ,         "dir",          "vp" ) ,
  "roles" = c  ("dev, qa", "dev, qa, ops", "dev, qa, ops", "dev")
 )

Наивный ctab дает мне это (и связанное):

                  level
roles          dir mgr vp
  dev            0   0  1
  dev, qa        1   0  0
  dev, qa, ops   1   1  0

Но мне нужно вот что (и я не хочу предварительно указать dev, qa, ops и т. д.):

         dev     qa      ops
dir       2       2       1
mgr       1       1       1
vp        1       0       0

Я постарался найти похожие. Извиняюсь, если на этот вопрос уже был дан ответ. Спасибо!

-ctb

21.05.2020

  • Из какого пакета вы запускаете ctab? 21.05.2020

Ответы:


1

Вот ответ с использованием tidyr

library(tidyr)
tmp2 <- data.frame (
"level" = c ( "dir" ,    "mgr" ,         "dir",          "vp" ) ,
"roles" = c  ("dev, qa", "dev, qa, ops", "dev, qa, ops", "dev")
)
tmp3 <- separate_rows(tmp2, roles)
table(tmp3$level, tmp3$roles)
#>      
#>       dev ops qa
#>   dir   2   1  2
#>   mgr   1   1  1
#>   vp    1   0  0
21.05.2020

2

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

library(data.table)
setDT(tmp2)
res <- tmp2[,index:=1:.N][,.(value=unlist(strsplit(roles,","))),.(index,level)]

##> res
##    index level value
## 1:     1   dir   dev
## 2:     1   dir    qa
## 3:     2   mgr   dev
## 4:     2   mgr    qa
## 5:     2   mgr   ops
## 6:     3   dir   dev
## 7:     3   dir    qa
## 8:     3   dir   ops
## 9:     4    vp   dev

будьте осторожны, так как strsplit возвращает список, поэтому вам нужно unlist результат, чтобы он был правильно отформатирован. Тогда нам нужно только dcast, и все готово.

dcast(res,level~value,value.var="value")

##    level  ops  qa dev
## 1:   dir    1   2   2
## 2:   mgr    1   1   1
## 3:    vp    0   0   1
21.05.2020
Новые материалы

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

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

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

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

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

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

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