Как разделить тепловую карту в указанных c строках? Недопустимая ошибка для атомов c - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь построить тепловую карту в R. Я хотел разделить тепловую карту по указанным c строкам. Например, моя матрица имеет вид:

ID AB C

FD_1 0,3 0,2 1

FD_2 0,4 1 0,9

FD_3 0,6 0,8 0,2

FS_1 0,3 0,2 1

FS_2 0,4 1 0,9

FS_3 0,6 0,8 0,2

FS_4 0,4 ​​1 0,9

FS_5 0,6 0,8 0,2

FE_1 0,3 0,2 1

FE_2 0,4 1 0,9

FE_3 0,6 0,8 0,2

FE_4 0,4 ​​1 0,9

Мне нужно составить тепловую карту это включает 3 среза: один для 3 FD, один для 5 FS и один для 4 FE. И пометьте каждый срез своим именем как FD, FS и FE.

Я использую этот код: Heatmap (M_matrix, name = "level", row_split = M_matrix $ ID)

Но Я получаю эту ошибку: Ошибка в M_matrix $ ID: оператор $ недопустим для атомов c векторов

Есть предложения? Спасибо

Ответы [ 3 ]

1 голос
/ 22 апреля 2020

Вы можете определить разделения на основе вашего столбца ID:

library(ComplexHeatmap)
ID=c(paste0("FD_", 1:3), paste0("FS_", 1:5), paste0("FE_", 1:4))
df <- data.frame(ID=ID,
                 matrix(rnorm(3*12, mean = 3), ncol=3, 
                        dimnames=list(ID, LETTERS[1:3])),
                 stringsAsFactors = FALSE)
splits <- factor(gsub("_.*", "", ID))
Heatmap(matrix=as.matrix(df[,-1] ), row_split = splits, cluster_row_slices = FALSE)

heatmap

0 голосов
/ 22 апреля 2020

Мы можем использовать group_split

library(dplyr)
library(stringr)
list_df <- df %>%
              group_split(grp = str_remove(ID, "_.*"), keep = FALSE)
0 голосов
/ 22 апреля 2020

Если вам нужен список данных на основе ID, мы можем использовать split.

list_df <- split(df, sub("_.*", "", df$ID))
list_df

#$FD
#    ID   A   B   C
#1 FD_1 0.3 0.2 1.0
#2 FD_2 0.4 1.0 0.9
#3 FD_3 0.6 0.8 0.2

#$FE
#     ID   A   B   C
#9  FE_1 0.3 0.2 1.0
#10 FE_2 0.4 1.0 0.9
#11 FE_3 0.6 0.8 0.2
#12 FE_4 0.4 1.0 0.9

#$FS
#    ID   A   B   C
#4 FS_1 0.3 0.2 1.0
#5 FS_2 0.4 1.0 0.9
#6 FS_3 0.6 0.8 0.2
#7 FS_4 0.4 1.0 0.9
#8 FS_5 0.6 0.8 0.2
...