#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-м измерении.