R计算与数据帧中的值成比例的RGB代码

R计算与数据帧中的值成比例的RGB代码,r,collapse,R,Collapse,我有一个简单的数据帧,其中的值是log2比例 我试图向数据帧中添加一列,其中包含与第一列中的值成比例的R、G、B代码。 另外,如果该值大于或小于某个值,则我要放置一个treshold。在这种情况下,最小值为-5,最大值为5。 我是在awk中做的,但在R中找不到解决方案 我的awk代码: awk -v maxlogratio=5 -v FS='\t' -v OFS='\t' '/^chr/{{r=0;g=0;if($9<1){{r=-255*(log($9)/log(2))/maxlogra

我有一个简单的数据帧,其中的值是log2比例

我试图向数据帧中添加一列,其中包含与第一列中的值成比例的R、G、B代码。 另外,如果该值大于或小于某个值,则我要放置一个treshold。在这种情况下,最小值为-5,最大值为5。 我是在awk中做的,但在R中找不到解决方案 我的awk代码:

awk -v maxlogratio=5 -v FS='\t' -v OFS='\t' '/^chr/{{r=0;g=0;if($9<1){{r=-255*(log($9)/log(2))/maxlogratio;if(r>255){{r=255}}}};if($9>1){{g=255*(log($9)/log(2))/maxlogratio;if(g>255){{g=255}}}};print $0,r","g",0"}}'
我期望:

activity    rgb
  -6    255,0,0 
  -5    255,0,0 
  -4    204,0,0 
  -3    153,0,0
  -2    102,0,0
  -1    51,0,0
   0    0,0,0   
   1    0,51,0  
   2    0,102,0 
   3    0,153,0 
   4    0,204,0 
   5    0,255,0
   6    0,255,0 
所以我需要在rgb列中粘贴值,但我不知道怎么做

所以最后我做了些事情得到了r,g,b

但我仍然无法将-5/5的最小值和值固定为255

activity_rgb=data.frame(activity=seq(from=-6,to = 6,by = 1))%>%
mutate(rgb=ifelse(activity<0,paste(-255*(activity)/5,0,0,sep = ","),paste(0,255*(activity)/5,0,sep = ",")))

activity_rgb
   activity     rgb
1        -6 306,0,0
2        -5 255,0,0
3        -4 204,0,0
4        -3 153,0,0
5        -2 102,0,0
6        -1  51,0,0
7         0   0,0,0
8         1  0,51,0
9         2 0,102,0
10        3 0,153,0
11        4 0,204,0
12        5 0,255,0
13        6 0,306,0 
activity\u rgb=data.frame(activity=seq(from=-6,to=6,by=1))%>%
mutate(rgb=ifelse)(活动尝试以下用法:


scale\u to\u rgb建议使用
colorRampPalette
。既然您似乎想要颜色的箱子,也许您可以使用
cut
首先将数据值装箱,然后选择合适的颜色。谢谢,但实际上我需要在我的数据框的一列中使用rgb值。谢谢您在列中的rgb值不是直接的y有用。为什么不使用提供直接适用于所有绘图函数的值的东西,而不必对其进行字符串拆分/解析/拆分/munge?因为这样我将在文件中写入输出数据帧,并使用需要RGB值的程序谢谢,但我希望从红色变为黑色,然后从黑色变为绿色。在0时,我希望RGB=0,0,0我觉得没关系。我只需要在函数中添加黑色。感谢您在您的需求中有任何其他未说明的限制?(设置
colors=c(“#ff0000”,“#000000”,“#00ff00”)
)pmax和pmin的工作原理是:如果我的值大于或小于-5/5;但是如果我有-4,它将缩放到-5,我将得到255,0,而不是204,0,0。你的答案非常有用,但我仍然停留在这个问题上。如果我的值大于-5,它将缩放到-5。谢谢
activity    rgb
  -6    255,0,0 
  -5    255,0,0 
  -4    204,0,0 
  -3    153,0,0
  -2    102,0,0
  -1    51,0,0
   0    0,0,0   
   1    0,51,0  
   2    0,102,0 
   3    0,153,0 
   4    0,204,0 
   5    0,255,0
   6    0,255,0 
activity_rgb=data.frame(activity=seq(from=-6,to = 6,by = 1))%>%
mutate(rgb=ifelse(activity<0,paste(-255*(activity)/5,0,0,sep = ","),paste(0,255*(activity)/5,0,sep = ",")))

activity_rgb
   activity     rgb
1        -6 306,0,0
2        -5 255,0,0
3        -4 204,0,0
4        -3 153,0,0
5        -2 102,0,0
6        -1  51,0,0
7         0   0,0,0
8         1  0,51,0
9         2 0,102,0
10        3 0,153,0
11        4 0,204,0
12        5 0,255,0
13        6 0,306,0