在R
中的一个非常大的数据集中多次将2列组合成1列我正在研究的笨拙的解决方案不会非常快,如果我可以让他们工作,真正的数据集是~1500 X 45000所以他们需要快速。我在这一点上绝对不知所措,尽管有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)我需要将当前在2列中的所有双等位基因SNP数据合并为1列,例如:rs123和rs123.1合并为一列(但在数据集中):
11
31
11
31
31
11
11
11
31
11
2)我需要确定最不频繁的SNP值(在上面的例子中它是31)。
3)我需要将最不频繁的SNP值替换为1,将其他值替换为0。
答案 0 :(得分:8)
你的意思是'合并'或'重新排列'还是只是连接?如果是后者那么
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>