-1

我有以下data.frame

df<-data.frame(x=c("A","B","C"),colour=c(0.3,0.6,0.9))

  x colour
1 A    0.3
2 B    0.6
3 C    0.9

我想用这样的颜色替换 df[,"color"] 中的数字

< 0.4 = colour 1 
0.4 - 0.7 = colour 2 
< 0.7= colour 3

我尝试了以下替换方案,但之前的颜色分配被后者替换了。有什么建议吗?

library(RColorBrewer)

g<-brewer.pal(3,"Greens")

col1<-df[,"colour"] < 0.4
df[col1,"colour"]<-g[1]
col2<-df[,"colour"] < 0.7
df[col2,"colour"]<-g[2]
col3<-df[,"colour"] >= 0.7
df[col3,"colour"]<-g[3]

谢谢你的建议。

解决方案感谢 seacarmody(和 spaceman 的有用评论)

v<-c(0.45,0.65,0.75,0.85,0.95)
breaks<-c(0.4,0.5,0.6,0.7,0.8,0.9)

#Create a colour for each section
cols<-brewer.pal(length(breaks)+1,"Greens")
#Replace the gsim values with colours using the breaks
v <- as.character(cut(v, c(-Inf, breaks, Inf),labels=cols))

 > v
[1] "#C7E9C0" "#74C476" "#41AB5D" "#238B45" "#005A32"
4

1 回答 1

2

如果您更改订单,您的方法将起作用:

col2<-df[,"colour"] < 0.7
df[col2,"colour"]<-g[2]
col1<-df[,"colour"] < 0.4
df[col1,"colour"]<-g[1]

由于小于 0.4 的所有内容也小于 0.7,因此您的方法是覆盖 col1。由于您已经编辑了原始问题,因此上述内容已过时。我只是在这里使用更通用的方法:

breaks <- c(0.4, 0.7)  # you can add more cut points here
cols <- brewer.pal(length(breaks) + 1, "Greens")
df$colour <- as.character(cut(df$colour, c(-Inf, breaks, Inf), labels=cols))
于 2012-08-25T07:23:50.740 回答