因此,我的问题出现是因为我目前正在处理以以下格式接收的.csv文件的SNP数据:
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*,其中第一个值是顶行,第二个值是底行。
因此,最终结果应该是:
alleleID | sample1 | sample2 | sample3
---------------------------------------
A | 0 | 1 | 1
B | 1 | 1 | 0
C | 2 | 1 | 2 我怎样才能用R获得它呢?
致以敬意,
洛伦佐
另外,谢谢seb修好了桌子
另外,我已经在R中尝试了一些东西,但都不起作用,我认为添加我到目前为止尝试过的东西只会让人感到困惑
发布于 2016-10-27 04:02:20
下面是我推荐的步骤:
例如,对于AlleleID C和Sample sample1,矩阵值会将值1相加两次,从而得到矩阵值2。
发布于 2017-01-31 15:13:10
您可以创建一个小函数来运行您的逻辑-这利用了0和FALSE,以及1和TRUE
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遍历等位基因
library(dplyr)
df %>% group_by(alleleID) %>% summarise_all(fx)如果您的数据集很大,可能有更快的方法来运行它-例如,在运行之前将整个数据集转换为TRUE/FALSE。
您还应该检查每个等位基因是否有且只有两行
也许吧
stopifnot(all(table(df$alleleID) == 2))数据
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 = "|")https://stackoverflow.com/questions/40235636
复制相似问题