【问题标题】:Combining 2 columns into 1 column many times in a very large dataset in R在R中的一个非常大的数据集中多次将2列组合成1列
【发布时间】:2011-01-21 21:55:14
【问题描述】:

在R中的一个非常大的数据集中多次将2列组合成1列

如果我能让它们工作并且真正的数据集约为 1500 X 45000,那么我正在研究的笨拙的解决方案不会很快,因此它们需要快速。尽管有一些 2) 和 3) 的代码,但我现在对 1) 肯定不知所措。

这是一个数据结构的玩具示例:

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) 我需要用 1 替换最不频繁的 SNP 值,用 0 替换其他值。

【问题讨论】:

    标签: r merge


    【解决方案1】:

    您的意思是“合并”或“重新排列”还是简单地连接?如果是后者那么

    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> 
    

    【讨论】:

    • 粘贴!当然!我的意思是连接。非常感谢帮忙。现在我正在努力让它在 45,000 列中工作。再次感谢!
    • 您可以使用grep()match() 来获取列索引。另外,如果您认为这个答案是正确的,请随时投票和/或接受这个答案:-)
    • 接受! :) 我显然还没有足够的声望点来投票……!
    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多