根据R中向量的值提取数据帧的值

时间:2016-06-27 13:47:53

标签: r vector merge match extract

我正在设计一个颜色调色板,其渐变颜色与数字变量R的值匹配。

我有一个类似于这个值的向量。有负值,重复值和缺失值。

vec <- c(-1.17, -1.12, 0, 0.01, 0.01, NA, 0.01, -1.17, 1.2, 1.21, 1.35, 1.35, NA, NA)

我正在使用渐变颜色设计调色板,如下所示:

colnum <- seq(-1.5, 1.5, 0.01) # to define range of values
library(colorspace) 
color <- diverge_hcl(length(colnum))[rank(colnum)]  # the color pallette going from blue to red 

现在,我真的陷入了最后一步。如何提取一个矩阵,我知道哪个值分配给哪种颜色?

以下是我的尝试:

values <- data.frame(unique(vec))
colnames(values) <- "colnum"

colpal <- data.frame(colnum, color)

colpal2 <- merge(values, colpal, by="colnum", all.x=TRUE)
colpal2

 colnum   color
1  -1.17 #6270AF
2  -1.12 #6B77B2
3   0.00 #E2E2E2
4   0.01    <NA>
5   1.20    <NA>
6   1.21 #AA5367
7   1.35 #9D3752
8     NA    <NA>

为什么当它们属于唯一值时,我没有得到0.01和1.20的颜色值?

unique(vec)
[1] -1.17 -1.12  0.00  0.01    NA  1.20  1.21  1.35

编辑:我也尝试了这个选项,得到了相同的结果。

colpal[colpal$colnum %in% unique(vec), ]

     colnum   color
34   -1.17 #6270AF
39   -1.12 #6B77B2
151   0.00 #E2E2E2
272   1.21 #AA5367
286   1.35 #9D3752

有人可以解释一下我做错了什么吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

解决方案很简单as.character

colpal[colpal$colnum %in% as.character(unique(vec)), ]