我想从以下组信息中插入一个组的颜色代码。我们不想被动,而是希望通过 for 语句或 if 语句计算组的数量并为每个组分配颜色来创建一个新的数据框。
Sample_Info <- read_excel("poppulation.xlsx", sheet = 1, skip = 0) Sample_Info <- as.data.frame(Sample_Info) #Sample_Info == The data we just read is the same as this one. Sample_ID <- c("F","M", "F1_1", "F1_2") Population <- c("parent", "parent", "child", "child") data.frame(Sample_ID, Population)
如果代码正常运行,您可以看到同一个词在 Sample 和 4 Populations 中出现了两次。在这里,我想分别为“父”和“子”输入颜色代码。
Population_Count <- c(1:length(unique(unlist(Sample_Info[2])))) pal <- c("#E85C90","#0D41E1", "#5CB270", "#432371", "#FBA949","red", "#0de189", "#db69f5", "#2AA8F2") Population_Color <- sample(pal, length(Population_Count), replace = F) # Population_Color == "#2AA8F2", "#FBA949"
它可能是随机的,所以它可能与我的不同。所以现在我什至可以将颜色应用于组。但我想让“父母”和“孩子”的数据自动输出。例如,在上述情况下,您希望接收以下数据。
SSS <- c("F","M", "F1_1", "F1_2") CCC <- c("#2AA8F2","#2AA8F2","#FBA949","#FBA949") Exam <- data.frame(SSS, CCC) names(Exam) <- c("Sample_ID", "Population") Exam
换言之,与第一个数据相比,插入了表示颜色的代码,而不是“父”和“子”。以后我会收到多少组是未知的,每次更改一个对象和一个组都需要大量的时间手动进行,所以我想这样更改。因为您现在编写的代码是您正在编写的整个代码的一部分。如果有人知道这件事,请告诉我。
提前感谢您的建议。
这是一个从调色板中为每个组分配颜色的选项(不管组的数量,只要您的组少于颜色):
set.seed(10) Color_df <- data.frame(colour = sample(pal, length(unique(Sample_Info$Population)), replace = F), Population = unique(Sample_Info$Population)) Sample_Info %>% left_join(Color_df, by = "Population") Sample_ID Population colour 1 F parent #2AA8F2 2 M parent #2AA8F2 3 F1_1 child #0D41E1 4 F1_2 child #0D41E1