-1

22 の異なるレベル (染色体の数) しかない約 80k エントリの列があります。レベルが次のレベルに変化する位置を見つけるためのRの簡単なトリックはありますか?そのため、どの行で染色体 1 が染色体 2 に変化するかを調べます (単一の染色体のすべてのエントリが一緒にリストされます)。

私のデータは次のようになります。

chr number  marker name (SNP) 
1              rs...
1              rs...
.
.
2

ありがとう

4

3 に答える 3

1

diff非ゼロであることを確認します。これはTRUE、連続する値が同じでない場合の論理ベクトルを返します。でラップしてwhich、数値インデックスを取得します。

(x <- factor(sample(c("a", "b"), 15, replace = TRUE)))
# [1] a a b b a a b b b b b a b a a
# Levels: a b
diff(as.integer(x)) != 0
# [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE
which(diff(as.integer(x)) != 0)
# [1]  2  4  6 11 12 13

すべての染色体値がグループ化されている場合、各レベルの最初のインスタンスを で見つけることができますduplicated

(x2 <- factor(rep(c("a", "b", "c"), times = c(3, 4, 6))))
# [1] a a a b b b b c c c c c c
# Levels: a b c
!duplicated(x2)
# [1]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
which(!duplicated(x2))
# [1] 1 4 8
于 2013-04-11T10:20:07.793 に答える
0

これに使用できrleます(質問が正しければ):

x <- rep(LETTERS[1:22], each = 3)
x
# [1] "A" "A" "A" "B" "B" "B" "C" "C" "C" "D" "D" "D" "E" "E" "E" "F" "F" "F" "G" "G" "G" "H" "H" "H" #"I" "I" "I" "J" "J" "J" "K" "K" "K" "L" "L" "L" "M" "M" "M" "N" "N" "N" "O" "O" "O" "P" "P" "P" #"Q" "Q" "Q" "R" "R" "R" "S" "S" "S" "T" "T" "T" "U" "U" "U" "V" "V" "V"
rles <- rle(x)
cumsum(rles$lengths)
# [1]  3  6  9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66
于 2013-04-11T10:16:59.520 に答える