【问题标题】:Extract values of a dataframe according to values of a vector in R根据 R 中向量的值提取数据帧的值
【发布时间】:2016-06-27 13:47:53
【问题描述】:

我正在尝试设计一个调色板,其渐变颜色与 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

谁能解释我做错了什么?非常感谢!

【问题讨论】:

    标签: r vector merge match extract


    【解决方案1】:

    解决方案是一个简单的as.character

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

    【讨论】: