我有一个像这样的数据框:
head(m,20)
snp1 snp2 r2
1 rs7278528 rs7278528 1.000
2 rs234750 rs7278528 0.841
3 rs413621 rs7278528 0.841
4 rs413624 rs7278528 0.568
5 rs4920017 rs7278528 0.841
6 rs393280 rs7278528 0.821
7 rs1788470 rs7278528 0.568
8 rs10887972 rs7278528 0.568
9 rs439861 rs7278528 0.568
10 rs1672133 rs7278528 0.841
11 rs370994 rs7278528 0.841
12 rs442981 rs7278528 0.841
...
我想为snp2中的每个唯一值分别计算并输出一列,其中多少snp1的r2> 0.8
我很累,但是没有成功:
m %>%
group_by(snp1) %>%
summarize(sumR2 = sumRows(snp1[r2>0.8]))
这解决了我的问题:
t <- filter(m, r2 >= 0.8) %>% group_by(snp1) %>% mutate(ldbuds = length(r2))
答案 0 :(得分:0)
根据描述,我们可能需要按“ snp2”分组,提取与“ r2”大于0.8的位置相对应的“ snp1”,并获取“ snp1”的唯一元素的长度
library(tidyverse)
m %>%
group_by(snp2) %>%
summarize(sumR2 = n_distinct(snp1[r2>0.8]))
或者可能是
m %>%
group_by(snp2) %>%
summarise(sumR2 = sum(r2 > 0.8, na.rm = TRUE))
答案 1 :(得分:0)
如果您可以包括数据的可复制示例,那就太好了!
但是,如果您要按snp2分组,则应该可以使用
m %>%
group_by(snp2) %>%
summarize(sumR2 = n_distinct(r2>0.8))