2010-02-28 52 views
5

中的R組合2列到1列多次在一個非常大的數據集中的R組合2列到1列多次在一個非常大的數據集

笨拙的解決方案,我的工作都不會很如果我可以讓他們工作,並且真正的數據集是〜1500 X 45000,那麼他們需要快速。我絕對不知道1)在這一點上,雖然有一些2)和3)的代碼。

這裏是數據結構的玩具例如:

pop = data.frame(status = rbinom(n, 1, .42), sex = rbinom(n, 1, .5), 
age = round(rnorm(n, mean=40, 10)), disType = rbinom(n, 1, .2), 
rs123=c(1,3,1,3,3,1,1,1,3,1), rs123.1=rep(1, n), rs157=c(2,4,2,2,2,4,4,4,2,2), 
rs157.1=c(4,4,4,2,4,4,4,4,2,2), rs132=c(4,4,4,4,4,4,4,4,2,2), 
rs132.1=c(4,4,4,4,4,4,4,4,4,4)) 

因此,存在的基本人口統計信息的幾個列,然後將柱的其餘部分是雙等位基因SNP信息。例如:rs123是rs123的等位基因1,rs123.1是rs123的第二個等位基因。

1)I需要合併所有的雙等位基因SNP數據中當前可以2列到1列,因此,例如:rs123和rs123.1成一列(但在數據集內):

11 
31 
11 
31 
31 
11 
11 
11 
31 
11 

2)我需要確定最不頻繁的SNP值(在上例中爲31)。

3)我需要0

回答

8

以取代1頻率最低的SNP值和其他(S)你的意思是「合併」或「重排」或簡單地拼接?如果是後者則

R> pop2 <- data.frame(pop[,1:4], rs123=paste(pop[,5],pop[,6],sep=""), 
+        rs157=paste(pop[,7],pop[,8],sep=""), 
+        rs132=paste(pop[,9],pop[,10], sep="")) 
R> pop2 
    status sex age disType rs123 rs157 rs132 
1  0 0 42  0 11 24 44 
2  1 1 37  0 31 44 44 
3  1 0 38  0 11 24 44 
4  0 1 45  0 31 22 44 
5  1 1 25  0 31 24 44 
6  0 1 31  0 11 44 44 
7  1 0 43  0 11 44 44 
8  0 0 41  0 11 44 44 
9  1 1 57  0 31 22 24 
10  1 1 40  0 11 22 24 

,現在你可以做計數和諸如此類的東西在POP2:

R> sapply(pop2[,5:7], table) 
$rs123 

11 31 
6 4 

$rs157 

22 24 44 
3 3 4 

$rs132 

24 44 
2 8 

R> 
+0

貼!當然!我的意思是連接。非常感謝幫忙。現在我正在努力使其在45,000列上工作。再次感謝! – 2010-02-28 00:48:50

+0

您可以使用'grep()'和'match()'來獲得列索引。此外,如果它作爲正確答案觸發你,請隨時註冊並/或接受此答案:-) – 2010-02-28 01:16:23

+1

已被接受! :)我沒有足夠的聲望點顯然是upvote呢......! – 2010-02-28 05:48:12

相關問題