R中的逻辑顺序在数据框中创建列并用信息填充它

Logical order in R to create column in data frame and fill it with information

我有一个 df,其中包含以下列(带有超级人口 ID)。它的别名是 Superpop:

EUR
EUR
EUR
AMR
AMR
AFR
AMR
AFR
EUR
SAS
EUR
...

并且我需要(稍后使用 scatterplot3d)构建另一个列,假设名为“pcolors”的列,它必须具有颜色名称来识别超级总体,以便为图中的点着色。我想要这个作为输出:

EUR red
EUR red
EUR red
AMR blue
AMR blue
AFR green
AMR blue
AFR green
EUR red
SAS yellow
EUR red
... ...

问题是它们没有排序,而且 df 有 2524 行长,所以我不能手动完成,而且由于其他列的顺序,我不想对它进行排序。有没有一种方法,例如,用一个逻辑函数来表示“生成另一列,并且,如果在那一行 Superpop==EUR,然后在 pcolor 列的那一行写下”红色“...”等等我有 5 个超级种群?有什么想法吗?谢谢!

只需使用下标。您可以像这样创建一个命名的颜色向量:

pcolor <- c(EUR = "red", AMR = "blue", AFR = "green", SAS = "yellow")

那么如果

df <- data.frame(Superpop = c("EUR","EUR","EUR","AMR","AMR","AFR","AMR","AFR","EUR","SAS","EUR"))

如果你这样做

df$color = pcolor[as.character(df$Superpop)]

那么df就是:

Superpop  color
1       EUR    red
2       EUR    red
3       EUR    red
4       AMR   blue
5       AMR   blue
6       AFR  green
7       AMR   blue
8       AFR  green
9       EUR    red
10      SAS yellow
11      EUR    red

这很简单:

pcolors <- unsplit(superpop, value = colors())

您可以在值参数中选择您想要的颜色。