如何计算dplyr::group_的成员之间的重叠
我有以下几点:如何计算dplyr::group_的成员之间的重叠,r,dplyr,R,Dplyr,我有以下几点: 库(tidyverse) df%分组依据(单元类型) #>来源:本地数据帧[7 x 2] #>分组:celltype[3] #> #>#A tibble:7 x 2 #>基因细胞型 #> #>1 a cel1\u 1 #>2 b cel1_1 #>3 c cel1_1 #>4 a单元2 #>5b单元2 #>6c单元3 #>7d单元3 重叠中的基因可以按以下方式分组 1单元a、b、c 第2单元a、b 第三单元c,d 我要做的是计算所有细胞的基因重叠, 结果如下
库(tidyverse)
df%分组依据(单元类型)
#>来源:本地数据帧[7 x 2]
#>分组:celltype[3]
#>
#>#A tibble:7 x 2
#>基因细胞型
#>
#>1 a cel1\u 1
#>2 b cel1_1
#>3 c cel1_1
#>4 a单元2
#>5b单元2
#>6c单元3
#>7d单元3
重叠中的基因可以按以下方式分组
1单元a、b、c
第2单元a、b
第三单元c,d
我要做的是计算所有细胞的基因重叠,
结果如下表所示:
cell1 cell2 cell3
单元1 3 2 1
20号牢房
单元格3 1 0 2
我怎样才能做到这一点
更新 最后计算百分比(除以最大分母) 配对)
#单元1单元2单元3
单元格1.00(3/3)0.67(2/3)0.33(1/3)
单元格2 0.67(2/3)1.00 0
单元格30.33(1/3)01.00
我试过了,但没有得到我想要的:
>tmp tmp/max(tmp)
细胞型
celltype cel1\u 1 Cellu 2 Cellu 3
cel1_1 1.0000000 0.66667 0.3333333
单元格2 0.66667 0.66667 0.0000000
单元格3 0.3333333 0.0000000.66667
因此对角线的值始终为1.00。我们可以将
表格
与交叉生产
crossprod(table(df))
# celltype
#celltype cell_1 cell_2 cell_3
# cell_1 3 2 1
# cell_2 2 2 0
# cell_3 1 0 2
或者另一个选项是
tidyverse
library(tidyverse)
count(df, gene, celltype) %>%
spread(celltype, n, fill = 0) %>%
select(-gene) %>%
as.matrix %>%
crossprod
# cel1_1 cell_2 cell_3
#cel1_1 3 2 1
#cell_2 2 2 0
#cell_3 1 0 2
或使用
数据。表格
library(data.table)
crossprod(as.matrix(dcast(setDT(df), gene~celltype, length)[,-1]))
我们可以将
表格
与crossprod
crossprod(table(df))
# celltype
#celltype cell_1 cell_2 cell_3
# cell_1 3 2 1
# cell_2 2 2 0
# cell_3 1 0 2
或者另一个选项是
tidyverse
library(tidyverse)
count(df, gene, celltype) %>%
spread(celltype, n, fill = 0) %>%
select(-gene) %>%
as.matrix %>%
crossprod
# cel1_1 cell_2 cell_3
#cel1_1 3 2 1
#cell_2 2 2 0
#cell_3 1 0 2
或使用
数据。表格
library(data.table)
crossprod(as.matrix(dcast(setDT(df), gene~celltype, length)[,-1]))
@pdubois我使用this@pdubois你的数据集有多大?我更新了一个tidyverse选项和data.table选项。我忘了将dplyr管道序列分配给变量
df
@pdubois:只需将其分配给tmp,然后tmp@pdubois。Akrun也添加了答案,不是在答案中,而是在对你的问题的评论中。这就像捉迷藏;我们有什么反对线性…@pdubois我得到了预期的输出this@pdubois你的数据集有多大?我更新了一个tidyverse选项和data.table选项。我忘了将dplyr管道序列分配给变量df
@pdubois:只需将其分配给tmp,然后tmp@pdubois。Akrun也添加了答案,不是在答案中,而是在对你的问题的评论中。这就像捉迷藏;如果我理解,res如果我理解,res,我们有什么反对线性的呢