首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R将2行SNP数据转换为1行SNP数据

使用R将2行SNP数据转换为1行SNP数据
EN

Stack Overflow用户
提问于 2016-10-25 16:58:41
回答 2查看 143关注 0票数 0

因此,我的问题出现是因为我目前正在处理以以下格式接收的.csv文件的SNP数据:

代码语言:javascript
复制
alleleID | sample1 | sample2 | sample3
---------------------------------------
    A    |    1    |    0    |    0     
    A    |    0    |    1    |    1      
    B    |    0    |    0    |    1       
    B    |    1    |    1    |    0      
    C    |    1    |    0    |    1      
    C    |    1    |    1    |    1   

我需要合并具有相同alleleID的行(因此合并行2和3,合并4和5,合并6和7),保持alleleID,但根据以下条件更改其他单元格的值:

1个和1个-> 2

0和1 -> 1

1和0 -> 0*,其中第一个值是顶行,第二个值是底行。

因此,最终结果应该是:

代码语言:javascript
复制
alleleID | sample1 | sample2 | sample3
---------------------------------------
    A    |    0    |    1    |    1
    B    |    1    |    1    |    0
    C    |    2    |    1    |    2   

我怎样才能用R获得它呢?

致以敬意,

洛伦佐

另外,谢谢seb修好了桌子

另外,我已经在R中尝试了一些东西,但都不起作用,我认为添加我到目前为止尝试过的东西只会让人感到困惑

EN

回答 2

Stack Overflow用户

发布于 2016-10-27 04:02:20

下面是我推荐的步骤:

  1. 设置一个矩阵,将矩阵的行名和列名分别命名为AlleleID和sample#,并将矩阵的值添加到上面的数据上,然后使用AlleleID和sample#对矩阵进行索引,将观察到的数据值添加到矩阵值中。

例如,对于AlleleID C和Sample sample1,矩阵值会将值1相加两次,从而得到矩阵值2

票数 0
EN

Stack Overflow用户

发布于 2017-01-31 15:13:10

您可以创建一个小函数来运行您的逻辑-这利用了0和FALSE,以及1和TRUE

代码语言:javascript
复制
fx <- function(x){
  if(x[1] & x[2]) return(2)
  if(!x[1] & x[2]) return(1)
  if(x[1] & !x[2]) return(0)
  return(0)
}

然后使用dplyr遍历等位基因

代码语言:javascript
复制
library(dplyr)
df %>% group_by(alleleID) %>% summarise_all(fx)

如果您的数据集很大,可能有更快的方法来运行它-例如,在运行之前将整个数据集转换为TRUE/FALSE。

您还应该检查每个等位基因是否有且只有两行

也许吧

代码语言:javascript
复制
stopifnot(all(table(df$alleleID) == 2))

数据

代码语言:javascript
复制
df <- read.table(text = "alleleID | sample1 | sample2 | sample3
    A    |    1    |    0    |    0     
    A    |    0    |    1    |    1      
    B    |    0    |    0    |    1       
    B    |    1    |    1    |    0      
    C    |    1    |    0    |    1      
    C    |    1    |    1    |    1 ", header = TRUE, sep = "|")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40235636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档