如何在一列中满足另一列条件的条目数?

时间:2019-05-29 18:55:41

标签: r

我有一个像这样的数据框:

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)) 

2 个答案:

答案 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))