Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据帧中的因子转换为R中预先指定的颜色名称?_R - Fatal编程技术网

如何将数据帧中的因子转换为R中预先指定的颜色名称?

如何将数据帧中的因子转换为R中预先指定的颜色名称?,r,R,我正在尝试为基因表达数据生成热图,其中也有表示临床数据的列,如图所示: 我的问题是,heatmap.plus和heatmap.3都要求在热图中指定颜色的矩阵实际上写为颜色名称。他们不会在一列中提取正常因子并将其转换为颜色 这就是我的数据帧“df”的外观: sample_name gender chemotherapy clinical_subtype sample_01 M alk 1 sample_02

我正在尝试为基因表达数据生成热图,其中也有表示临床数据的列,如图所示:

我的问题是,heatmap.plus和heatmap.3都要求在热图中指定颜色的矩阵实际上写为颜色名称。他们不会在一列中提取正常因子并将其转换为颜色

这就是我的数据帧“df”的外观:

sample_name     gender     chemotherapy     clinical_subtype
sample_01       M          alk              1
sample_02       F          tmz              2
sample_03       M          rad              2
sample_04       M          rad.tmz          4
sample_05       F          tmz              3
我可以使用以下代码生成与特定颜色匹配的每个因子水平的数据框:

gender_colors <- with(df, data.frame(row.names = levels(gender), color = brewer.pal(nlevels(gender), name = 'Set1')))
有没有办法用这个数据框来索引原始因子,用它们相应的颜色来替换它们,这样我的原始框看起来会像下面这样

sample_name     gender     chemotherapy     clinical_subtype
sample_01       #8DA0CB    #FC8D62          #FDAE61
sample_02       #FC8D62    #66C2A5          #FFFFBF
sample_03       #8DA0CB    #C2294A          #FFFFBF
sample_04       #8DA0CB    #FA9856          #A6D96A
sample_05       #FC8D62    #66C2A5          #1A9641
如果有一种更简单的方法可以做到这一点,而不需要我生成与特定颜色匹配的中间因子级数据帧,这可能会容易得多,但对此问题的任何帮助都将不胜感激

      color
1     #D7191C
2     #FDAE61
3     #FFFFBF
4     #A6D96A
5     #1A9641

我建议保持简单,并使用
merge()
将各种颜色的数据帧连接到主
df
数据帧上。例如,要将性别
color
数据框加入到
df
中,可以使用以下方法:

color.gender <- data.frame(gender=c("", "F", "M"),
                           color=c("#66C2A5", "#FC8D62", "#8DA0CB"))
df <- merge(df, color.gender, by="gender")

如果您被限制为特定数量的列或名称,您可以很容易地修改数据框。

化疗和临床亚型的颜色是从哪里来的?它们位于单独的数据框中,看起来与性别完全相同(见上文)。您不能只使用
合并()
加入3列的颜色?是的,实际上效果非常好。我想我是想把问题复杂化了!非常感谢。
color.gender <- data.frame(gender=c("", "F", "M"),
                           color=c("#66C2A5", "#FC8D62", "#8DA0CB"))
df <- merge(df, color.gender, by="gender")
sample_name     gender     chemotherapy     clinical_subtype     color.gender
sample_01       M          alk              1                    #8DA0CB
sample_02       F          tmz              2                    #FC8D62
sample_03       M          rad              2                    #8DA0CB
sample_04       M          rad.tmz          4                    #8DA0CB
sample_05       F          tmz              3                    #FC8D62