有条件地 Select 并将 Double 转换为因子列表

Conditionally Select and Convert a Double to a list of Factors

这个问题有点奇怪,不知道从哪里开始。 我有一个双:

, , 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.framedata.table::as.data.table 开始,但都没有真正帮助我。任何帮助将不胜感激,谢谢!

您可以尝试使用 reshape2::melt

数据

dummy <- 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 %>%
  melt(id.vars = "row_id") %>%
  group_by(row_id) %>%
  filter(value == max(value)) %>%
  arrange(row_id) %>%
  pull(variable)

 [1] A C A A C C A C C C C C C A
Levels: A B C