将r中数据框中的数字替换为颜色
我有以下数据框将r中数据框中的数字替换为颜色,r,colors,replace,R,Colors,Replace,我有以下数据框 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如果您更改订单,您的方法将起作用: col2<-df[,"colour"] < 0.7 df[col2,"colour"]<-g[2] col1<-df[,"colour"] < 0.4 df[col1,"colour"]<-g[1]
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如果您更改订单,您的方法将起作用:
col2<-df[,"colour"] < 0.7
df[col2,"colour"]<-g[2]
col1<-df[,"colour"] < 0.4
df[col1,"colour"]<-g[1]
col2您的0和1限制与OP不一致-您可以在此处使用-Inf和+Inf。此外,您还可以将颜色作为标签参数输入以进行剪切,如果需要,还可以转换为字符。@Spacedman感谢指针:我已经编辑了答案。Elizbeth,看看这个修改后的版本是否有效。@seancarmody我很喜欢你的一般方法的简洁性,但它似乎生成了NAs(请参见更新的问题),或者我遗漏了什么?因为现在>0.5行覆盖了之前完成的>0.7行。超过0.7的所有值也超过0.5。不管怎么说,这一系列测试完全是错误的方法,R方法是对值向量进行一次测试。@Spacedman Darn。我打字打错了。我将更新问题。事实上不,我没有打字错误。当所有超过0.7的值也超过0.5时,排序应该考虑这个问题。您正在用字符替换某些数值。难怪你会得到NAs。真的,不要这样做,甚至不要尝试这样做。我怀疑您只是一次性运行了这段代码—不要—当您试图找出哪里出了问题时,一次只执行一行,然后查看变量的值是什么。在第一次更换后检查df是什么…再次,将其分解!切割(v,c(0,断裂,1))的值是多少?多少层?你的颜色向量有多长?
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]
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"
col2<-df[,"colour"] < 0.7
df[col2,"colour"]<-g[2]
col1<-df[,"colour"] < 0.4
df[col1,"colour"]<-g[1]
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))