У меня есть такой фрейм данных:

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)) 
r
1
anikaM 29 Май 2019 в 21:55

2 ответа

Лучший ответ

Основываясь на описании, нам может потребоваться сгруппировать по snp2, извлечь snp1, который соответствует значению r2 больше 0,8, и получить длину уникальных элементов 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))
0
akrun 29 Май 2019 в 18:56

Если бы вы могли включить воспроизводимый пример ваших данных, было бы неплохо!

Но это должно работать, если вы пытаетесь группировать по snp2

m %>%
  group_by(snp2) %>%
  summarize(sumR2 = n_distinct(r2>0.8))
0
Giovana Stein 29 Май 2019 в 18:58