Условно выберите и преобразуйте Двойник в список факторов

#r #double #data-wrangling

#r #двойной #споры о данных

Вопрос:

Это немного странная проблема, не знаю, с чего с этого начать. У меня есть двойной:

 , , s0   A B C 1 0.55417205 -0.0200187 0.2409565 3 -0.56678215 -0.0200187 0.4754662 18 1.37831681 -0.0200187 0.4260734 20 0.55175931 -0.0200187 0.4061181 28 -1.12156686 -0.0200187 0.4702297 30 0.06913091 -0.0200187 0.4188555 47 0.95545025 -0.0200187 0.2715263 50 0.07951062 -0.0200187 0.4648517 52 0.16938094 -0.0200187 0.3918239 68 0.12219372 -0.0200187 0.4339989 70 -0.11545481 -0.0200187 0.6075105 82 -0.36738143 -0.0200187 0.4444718 83 -0.63349441 -0.0200187 0.4593321 89 2.17432660 -0.0200187 0.1025435  

и я хочу преобразовать это, основываясь на самых высоких значениях в каждой строке столбца, в список факторов. Например, строка «1» будет A иметь наибольшее значение 0,55, строка «3» будет иметь C наибольшее значение 0,47 и т. Д. Конечный результат будет выглядеть так:

 A C A A...C A Levels: A B C  

Я пытался начать с data.frame , data.table::as.data.table и ни то, ни другое никуда меня не привело. Любая помощь будет признательна, спасибо!

Ответ №1:

Вы можете попробовать использовать reshape2::melt

Данные

 dummy lt;- read.table(text = " row_id A B C 1 0.55417205 -0.0200187 0.2409565 3 -0.56678215 -0.0200187 0.4754662 18 1.37831681 -0.0200187 0.4260734 20 0.55175931 -0.0200187 0.4061181 28 -1.12156686 -0.0200187 0.4702297 30 0.06913091 -0.0200187 0.4188555 47 0.95545025 -0.0200187 0.2715263 50 0.07951062 -0.0200187 0.4648517 52 0.16938094 -0.0200187 0.3918239 68 0.12219372 -0.0200187 0.4339989 70 -0.11545481 -0.0200187 0.6075105 82 -0.36738143 -0.0200187 0.4444718 83 -0.63349441 -0.0200187 0.4593321 89 2.17432660 -0.0200187 0.1025435", header = T)  

Код

 library(dplyr) library(reshape2)  dummy %gt;%  melt(id.vars = "row_id") %gt;%  group_by(row_id) %gt;%  filter(value == max(value)) %gt;%  arrange(row_id) %gt;%  pull(variable)   [1] A C A A C C A C C C C C C A Levels: A B C  

Комментарии:

1. Большое спасибо! Это работает. Сначала мне пришлось преобразовать свой двойник в табличную форму, что не заняло слишком много времени. Кстати, по-видимому , , s0 , в начале означало, что это была 3D-матрица с 0 в 3-м измерении.