複製數據
txt <- c("GGAGACAA", "GGATACAA", "AATCAGTC", "ACACCTGG")
比較所有序列
# split into letters
txtw <- sapply(txt, strsplit, "")
# find differences
txtc <- lapply(txtw, function(x) sapply(txtw, function(y) sum(x!=y)))
輸出是在同一個地方有多少字母的名單不同的相對於其他字母序列
> txtc
$GGAGACAA
GGAGACAA GGATACAA AATCAGTC ACACCTGG
0 1 7 7
$GGATACAA
GGAGACAA GGATACAA AATCAGTC ACACCTGG
1 0 7 7
$AATCAGTC
GGAGACAA GGATACAA AATCAGTC ACACCTGG
7 7 0 6
$ACACCTGG
GGAGACAA GGATACAA AATCAGTC ACACCTGG
7 7 6 0
如果您的比較是針對「GGAGACAA」,則2符合您的標準
> txtc[["GGAGACAA"]] > 1
GGAGACAA GGATACAA AATCAGTC ACACCTGG
FALSE FALSE TRUE TRUE
但是,如果您的參考是例如「AATCAGTC」,所有的(除了「AATCAGTC」本身)滿足您的條件
> txtc[["AATCAGTC"]] > 1
GGAGACAA GGATACAA AATCAGTC ACACCTGG
TRUE TRUE FALSE TRUE
所以我想你需要決定哪一個是參考。如果你總結了與其他所有數據集的不同之處,我猜想對於另一個數據集,你可能會發現一些與其他所有數據不同的東西(例如,下面顯示爲3),但是你的示例顯示所有數據集都至少有2個其他字符串,它們至少有2個字母不同。
> sapply(txtc, function(x) sum(x>1))
GGAGACAA GGATACAA AATCAGTC ACACCTGG
2 2 3 3
編輯:按照上述的辦法,來識別其是至少在不同從一切2個空間簡單地尋找那些具有非零輸出的最後一行的順序。但是在給定的樣本數據似乎並未有任何滿足這一標準,所以用不同的數據集下面我將重新運行:
txt <- c("GGAGACAA", "GGATACAA", "GGACACAA", "AGATACAA")
txtw <- sapply(txt, strsplit, "")
txtc <- lapply(txtw, function(x) sapply(txtw, function(y) sum(x!=y)))
# counting the number of different sequence against all sequences
matches <- sapply(txtc, function(x) sum(x>1))
# find those which has at least 1 other different sequence
different <- matches[matches>0]
在上面的例子中,「GGATACAA」是隻有一個字符不同一切,所以我期望輸出排除它,
> different
GGAGACAA GGACACAA AGATACAA
1 1 2
這是這種情況。上面的數字是至少有兩個字母差異的序列數。 「GGAGACAA」和「GGACACAA」只是彼此不同的一個字母,但是由於它們具有滿足該標準的另外一個序列,即「AGATACAA」,所以被保留。 「AGATACAA」有2個符合標準的其他序列。
你是什麼意思「2個字母不同?」你是指兩條鏈恰好相差2個鹼基對嗎? –
在上面的示例中,哪些行至少有兩個字母與「任何其他行」不同?我看到沒有兩行相差至多一個字母,所以肯定它們至少有兩個不同於其他行的字母?你能否給出一個不是*至少有兩個不同於任何(你是指每一個?)其他行的字母的例子嗎? –
我改變了我的例子,試圖讓我想要更清楚 – thermophile