小编典典

有没有办法自动替换数据中的“字符”?在 R 中

all

我想从以下组信息中插入一个组的颜色代码。我们不想被动,而是希望通过 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

换言之,与第一个数据相比,插入了表示颜色的代码,而不是“父”和“子”。以后我会收到多少组是未知的,每次更改一个对象和一个组都需要大量的时间手动进行,所以我想这样更改。因为您现在编写的代码是您正在编写的整个代码的一部分。如果有人知道这件事,请告诉我。

提前感谢您的建议。


阅读 111

收藏
2022-09-02

共1个答案

小编典典

这是一个从调色板中为每个组分配颜色的选项(不管组的数量,只要您的组少于颜色):

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
2022-09-02