получить частоту на основе двух столбцов - PullRequest
0 голосов
/ 26 февраля 2019

Фрагмент моего большого фрейма данных, который выглядит следующим образом:

MARKERS.IN.HAPLOTYPES BASE           rs. alleles chrom       pos        GID marker   trial
                 1A.12    C S1A_494392059     C/G    1A 494392059 GID7173723      2 ES26-38
                 1A.13    C S1A_497201550     C/T    1A 497201550 GID7173723      0 ES26-38
                 1A.14    T S1A_499864157     C/T    1A 499864157 GID7173723      2 ES26-38
                 1B.10    A S1B_566171302     G/A    1B 566171302 GID7173723      0 ES26-38
                 1B.20    G S1B_642616640     A/G    1B 642616640 GID7173723      2 ES26-38
                 2B.10    A  S2B_24883552     A/G    2B  24883552 GID7173723      2 ES26-38

Вот его dput:

structure(list(MARKERS.IN.HAPLOTYPES = c("1A.12", "1A.13", "1A.14", 
"1B.10", "1B.20", "2B.10"), BASE = c("C", "C", "T", "A", "G", 
"A"), rs. = c("S1A_494392059", "S1A_497201550", "S1A_499864157", 
"S1B_566171302", "S1B_642616640", "S2B_24883552"), alleles = c("C/G", 
"C/T", "C/T", "G/A", "A/G", "A/G"), chrom = c("1A", "1A", "1A", 
"1B", "1B", "2B"), pos = c(494392059L, 497201550L, 499864157L, 
566171302L, 642616640L, 24883552L), GID = c("GID7173723", "GID7173723", 
"GID7173723", "GID7173723", "GID7173723", "GID7173723"), marker = c("2", 
 "0", "2", "0", "2", "2"), trial = c("ES26-38", "ES26-38", "ES26-38", 
 "ES26-38", "ES26-38", "ES26-38")), row.names = c(NA, 6L), class = 
 "data.frame")

Есть 22 * ​​1008 * значений длястолбцы rs. в исходном кадре данных, и для столбца trial имеется шесть значений unique.Я хотел бы рассчитать относительные частоты различных значений столбца marker для каждого уникального rs. и каждого уникального trial.Так, например, первый элемент столбца rs. S1A_494392059 будет иметь частоты столбца marker для испытания ES26-38 и так далее, и так далее.Обратите внимание, что столбец marker является символьным вектором, а не числовым.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете попробовать это:

library(dplyr)

df %>%
  add_count(rs., trial, name = "Total") %>%
  add_count(rs., trial, marker, name = "MarkerTotal") %>%
  mutate(RelativeFreq = round(MarkerTotal / Total, 2))

Столбец name в add_count - это новая функция начиная с dplyr 0.8 и далее, которая позволяет вам выбрать имя (ранее было nили nn по умолчанию).Приведенный выше код не будет работать, если у вас нет обновленной версии пакета.

Относительные частоты в вашем примере будут равны 1, хотя и не особенно сложными.

Эточто вы могли бы сделать, если вы хотите получить суммарный фрейм данных (где единственными оставшимися столбцами будут группировки rs., trial и RelativeFreq):

df %>% 
  add_count(rs., trial, marker, name = "MarkerTotal") %>%
  group_by(rs., trial) %>%
  summarise(RelativeFreq = round(MarkerTotal / n(), 2))
...