2016-09-12 3 views
-3

Я отладки чужой код в R. У меня есть данные в матрице называется seg, которая выглядит как this- head(seg)Как работать с коэффициентами в матрицах в R

ид | chr | начало | конец | тест | ref | позиция | log2

102G.bam.vs.ref1.hits | 1 | 100350001 | 101250000 | 986 | 1933 | 100800000 | -0.179835 102G.bam.vs.ref1.hits | 1 | 100800001 | 101700000 | 1104 | 2113 | 101250000 | -0.145205 102G.bam.vs.ref1.hits | 1 | 101250001 | 102150000 | 1062 | 1874 | 101700000 | -0.0279899 102G.bam.vs.ref1.hits | 1 | 101700001 | 102600000 | 893 | 1610 | 102150000 | -0.0589814 102G.bam.vs.ref1.hits | 1 | 102150001 | 103050000 | 737 | 1394 | 102600000 | -0,128147

Он использованияКонтактная facet_grid(id~chr) в своих участках, и одна из проблем состоит в том, что порядок хромосом не является правильным, они сортируются в алфавитном порядке (что означает, что хромосомы 10-19 появляются перед хромосом 2-9 , и т. д.), уровни столбца chr находятся в неправильном порядке. levels(seg$chr)

[1] "1" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "2" "20" "21", "22", "3", "4"

[18] "5" "6" "7" "8" "9", "М", "X", "Y",

Я пытался изменить порядок уровней, но когда я сделал, что данные изменились, если, например, я хотел бы попробовать это levels(seg$chr) = c(22:1, "M", "X", "Y")

head(seg)

ID | chr | начало | конец | тест | ref | позиция | log2

102G.bam.vs.ref1.hits | 22 | 100350001 | 101250000 | 986 | 1933 | 100800000 | -0.179835 102G.bam.vs.ref1.hits | 22 | 100800001 | 101700000 | 1104 | 2113 | 101250000 | -0.145205 102G.bam.vs.ref1.hits | 22 | 101250001 | 102150000 | 1062 | 1874 | 101700000 | -0.0279899 102G.bam.vs.ref1.hits | 22 | 101700001 | 102600000 | 893 | 1610 | 102150000 | -0.0589814 102G.bam.vs.ref1.hits | 22 | 102150001 | 103050000 | 737 | 1394 | 102600000 | -0,128147

Так что, если, например, я использую levels(seg$chr) = c(1:22, "M", "X", "Y") метки будут правы, но все данные из хромосомы 10 будет иметь в виду хромосомы 2.

Я хочу данные, чтобы остаться, как есть, и измените только порядок уровней факторов (порядок сюжета), я, вероятно, пропустил что-то очень основное о том, как работать с факторами.

Спасибо!

ответ

1

Хорошо, я нашел способ избежать этого, не очень элегантный, но он работает. Вместо того, чтобы изменять уровни факторов напрямую, как я, я создал новый фактор с теми же данными и заменил предыдущий.

Вместо этого levels(seg$chr) = c(1:22, "M","X","Y") который изменил сам фактор, а также данные. Я использовал этот seg$chr = factor(seg$chr, levels = c(1:22, "M","X","Y")) , который создал новый фактор с теми же данными, только на этот раз уровни были в порядке.

Если есть лучшее решение, я был бы рад услышать об этом. :) Спасибо!