У меня есть простой фрейм данных, где у меня есть значение в масштабе log2.
Я пытаюсь добавить в фрейм данных столбец, содержащий код R, G, B, пропорциональный значению в первом столбце. Также, если значение больше или меньше значения, я хочу поставить порог. В этом случае мин -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"}}'
Единственное отличие здесь в том, что мое значение не в шкала log2 (вот почему у меня есть log (x) / log (2)
R код:
activity_rgb=data.frame(activity=seq(from=-6,to = 6,by = 1))%>%
mutate(rgb=ifelse(activity<0,c(-255*(activity)/5,0,0),c(0,255*(activity),0)))
Я получил это:
activity rgb
1 -6 306
2 -5 255
3 -4 204
4 -3 153
5 -2 102
6 -1 51
7 0 -255
8 1 0
9 2 255
10 3 510
11 4 765
12 5 1020
13 6 1275
Я ожидаю этого :
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
Но я все еще не могу установить минимальное значение 255 для -5 / 5
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