Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在一列中查找与其他几列相比唯一的字母,按段进行计数并打印其位置_R - Fatal编程技术网

R 在一列中查找与其他几列相比唯一的字母,按段进行计数并打印其位置

R 在一列中查找与其他几列相比唯一的字母,按段进行计数并打印其位置,r,R,我试图为Skov方法准备一个输入文件,以查看海豚种群中的幽灵祖先 我有一个如下所示的数据集: chr pos ind0 ind1 ind2 ind3 ind4 ind5 ind6 ind7 ind8 ind9 ind10 MRVK01001299.1 972 C C T N C C T N N C C MRVK01001299.1 973 G G G N G G G N

我试图为Skov方法准备一个输入文件,以查看海豚种群中的幽灵祖先

我有一个如下所示的数据集:

chr  pos ind0 ind1 ind2 ind3 ind4 ind5 ind6 ind7 ind8 ind9 ind10

MRVK01001299.1 972    C    C    T    N    C    C    T    N    N    C     C

MRVK01001299.1 973    G    G    G    N    G    G    G    N    N    G     G

MRVK01001299.1 997    C    T    T    T    T    T    T    T    T    T     T

MRVK01001299.1 999    A    T    T    N    T    T    T    T    T    T     T

MRVK01001299.1 1018   A    C    T    N    T    C    C    T    T    T     T

MRVK01001299.1 1086   A    T    T    T    T    T    T    T    T    T     T

MRVK01001299.1 2125   C    C    T    N    C    C    T    N    N    C     C

MRVK01001299.1 2456   G    G    G    N    G    G    G    N    N    G     G
数据是支架、位置,然后是在每个个体中发现的等位基因(A、T、C、G、N)。我将一个特定的个体(ind0)与其他个体进行比较,看看他是否有私人等位基因簇。如果是这样的话,这可能表明他来自我们没有取样的群体(幽灵群体)。chrm和pos列表示宽吻海豚参考基因组中的位置

这是对我的数据集的前8行(共43500行)前3个个体(共22个个体)的
dput()
的结果:

请注意,上表是一个包含私有等位基因的示例,但第一行不包含任何等位基因

我想确定在
ind0
中唯一找到字母的位置(
pos
)。“N”不会被视为不同的字母。例如,位置997、999和1086有一个唯一的值

然后,我想计算一下有多少次
ind0
在position(
pos
)列中有一个1000个私人字母的序列。并打印每个箱子的私有等位基因位置。因此这将是(需要输出文件):

因为我们有两个位置(位置997999),其中
ind0的唯一值在0和1000之间,1在1000和2000之间(位置1086),0在2000和3000之间。最大值将超过20000000

@zx87754提供了下面的代码,我想添加“
print
”私有等位基因的位置。我没有在论坛上找到帮助,除了打印或awk功能可能在这里有所帮助

确定哪些SNPs
ind0
有一个私有等位基因-“N”不作为缺失数据计算为不同的等位基因:

res1 <- df1[ rowSums(df1$ind0 == df1 [, -c(1:3)]) == 0 &
               apply(df1 [, -c(1:3)], 1, function(i) length(unique(i[ i != "N" ]))) == 1, ]

Count the number of positions with a private allele for ind0 in bins of 1000 bp:

res2<-table(cut(res1$pos, c(seq(0, 23092000, by=1000))))
res1
#数据
种子(42)
d=数据帧(chr=“A”,
位置=1:20,
ind0=样本(x=c(“A”、“c”、“T”、“G”、“N”),
尺寸=20,
replace=TRUE,
prob=c(.24、.24、.24、.24、.04)))
d$ind1=d$ind0
d$ind1[样本(1:20,5)]=样本(x=c(“A”、“c”、“T”、“G”、“N”),
尺寸=5,
replace=TRUE,
prob=c(.24、.24、.24、.24、.04))
d$ind2=d$ind1
#将列ind1子集到末尾,并获得每行的唯一值
所有行=应用(X=d[!colnames(d)%in%c(“chr”、“pos”、“ind0”)],
保证金=1,
乐趣=功能(x){
if(长度(唯一(x))==1&x[1]!=“N”){
x[1]
}否则{
NA
}
})
#标识ind0与所有_行不同的行索引
inds=其中(d[,“ind0”!=所有行都是.na(d[,“ind0”]))
#使用IND提取所需的数据
d$pos[IND]
#> [1]  5 19 20
d[inds,]
#>chr pos ind0 ind1 ind2
#>5A 5G A
#>19 A 19 T C
#>20A 20G A
由(v0.3.0)于2019-08-30创建

对于装箱和计数,您可以这样做

positions=d$pos[inds]
箱子=序号(0、20、5)
ans=聚合(列表(位置=位置),列表(b=切割(位置,箱子)),c)
ans$n=长度(ans$pos)
ans
#b位置n
#1   (0,5]      5 1
#2 (15,20] 19, 20 2

非常感谢,然后我希望每个箱子的私人站点数量为1000个,并且打印位置。我已经编辑了上面的帖子,并指出了所需的输出文件。非常感谢。我还没有成功修改以下内容。如果个人有一个字母,例如“a”,而其他所有人都有一个字母“t”,那么总共有22个人或者“N”,它仍然是私有的(不仅仅是在有一个“N”的情况下)。我还想打印计数为0的箱子。因此,所有箱子(在我的情况下,在0到20000000之间,步骤为1000)都将显示私有位置计数(包括0),如果有私有位置,则位置将打印在计数旁边。
0 2 997, 999

1000 1 1086

2000 0

etc
res1 <- df1[ rowSums(df1$ind0 == df1 [, -c(1:3)]) == 0 &
               apply(df1 [, -c(1:3)], 1, function(i) length(unique(i[ i != "N" ]))) == 1, ]

Count the number of positions with a private allele for ind0 in bins of 1000 bp:

res2<-table(cut(res1$pos, c(seq(0, 23092000, by=1000))))