Двухфакторная таблица подсчета с использованием dplyer для независимых столбцов в r - PullRequest
0 голосов
/ 15 октября 2019

У меня есть кадр данных, как показано ниже:

structure(list(group = c("K4", "K4", "K1", "K1", "K4", "K4", 
"K1", "K4", "K5", "K4", "K4", "K5", "K4", "K3", "K3", "K4", "K4", 
"K4", "K4", "K3", "K3", "K5", "K3", "K5", "K3", "K5", "K3", "K3", 
"K1", "K4", "K5", "K4", "K2", "K4", "K2", "K5", "K1", "K1", "K1", 
"K1", "K1", "K1", "K3", "K4", "K3", "K3", "K3", "K1", "K1", "K5", 
"K5", "K1", "K1", "K1", "K1", "K1", "K1", "K5", "K1", "K3", "K4", 
"K3", "K2", "K4", "K4", "K4", "K3", "K2", "K4", "K3", "K4", "K3", 
"K2", "K5", "K4", "K3", "K4", "K5", "K5", "K4", "K4", "K4", "K4", 
"K1", "K2", "K4", "K4", "K5", "K3", "K3", "K5", "K5", "K4", "K4", 
"K4", "K4", "K3", "K1", "K3", "K5", "K3", "K3", "K3", "K4", "K1", 
"K1", "K2", "K5", "K5", "K5", "K3", "K5", "K4", "K5", "K5", "K4", 
"K2", "K5", "K2", "K4", "K4", "K4", "K4", "K4", "K4", "K3", "K4", 
"K1", "K2", "K4", "K1", "K4", "K4", "K4", "K1", "K1", "K5", "K5", 
"K1", "K5", "K5", "K5", "K4", "K3", "K3", "K5", "K4", "K4", "K3", 
"K2", "K3", "K4", "K3", "K3", "K3", "K3", "K3", "K3", "K5", "K4", 
"K5", "K5", "K4", "K5", "K1", "K5", "K1", "K1", "K5", "K5", "K5", 
"K1", "K4", "K5", "K1", "K3", "K5", "K4", "K5", "K2", "K2", "K4", 
"K1", "K2", "K3", "K4", "K4", "K2", "K4", "K4", "K2", "K4", "K5", 
"K5", "K3", "K2", "K4", "K4", "K1", "K1", "K1", "K1", "K4", "K3", 
"K3", "K4", "K5", "K5", "K4", "K5", "K4", "K3", "K4", "K5", "K3", 
"K4", "K1", "K3", "K3", "K4", "K3", "K4", "K3", "K1", "K5", "K5", 
"K1", "K1", "K5", "K5", "K1", "K1", "K1", "K1", "K5", "K4", "K4", 
"K3", "K3", "K3", "K3", "K3", "K3", "K4", "K4", "K5", "K1", "K4", 
"K5", "K5", "K4", "K4", "K5", "K4", "K5", "K5", "K4", "K4", "K5", 
"K4", "K5", "K5", "K5", "K5", "K5", "K2", "K1", "K5", "K1", "K4", 
"K4", "K1", "K1", "K1", "K1", "K1", "K1", "K1", "K1", "K1"), 
    gene1 = c("MT", "MT", "WT", "WT", "MT", "MT", "MT", "MT", 
    "WT", "MT", "MT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "WT", "MT", "MT", "MT", "WT", "MT", "MT", 
    "MT", "MT", "WT", "WT", "MT", "MT", "MT", "WT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "WT", 
    "MT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "WT", "WT", "MT", "WT", 
    "WT", "MT", "MT", "MT", "MT", "WT", "MT", "MT", "MT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "MT", "MT", 
    "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "WT", "MT", "MT", "MT", "MT", "WT", "WT", 
    "MT", "MT", "MT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "WT", "MT", "WT", "MT", "WT", "MT", "MT", "WT", "MT", "WT", 
    "MT", "WT", "WT", "WT", "MT", "MT", "WT", "MT", "WT", "WT", 
    "WT", "WT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "WT", "MT", "WT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "WT", "MT", "WT", "MT", "MT", "WT", "WT", 
    "MT", "WT", "MT", "WT", "MT", "WT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "WT", 
    "MT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "WT", "WT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT"), gene2 = c("WT", "WT", "MT", "MT", "MT", "MT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "MT", "WT", "WT", "WT", 
    "MT", "WT", "MT", "WT", "WT", "MT", "WT", "WT", "WT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "WT", "WT", "WT", "MT", "MT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "MT", "WT", "MT", "MT", 
    "WT", "WT", "WT", "WT", "WT", "MT", "MT", "WT", "WT", "WT", 
    "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "MT", "MT", "MT", "WT", "WT", "WT", 
    "WT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "WT", "MT", 
    "MT", "MT", "WT", "WT", "MT", "MT", "MT", "WT", "MT", "MT", 
    "WT", "WT", "WT", "WT", "MT", "WT", "WT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "MT", "MT", "WT", "WT", "MT", "WT", "WT", "WT", "MT", 
    "WT", "MT", "WT", "MT", "MT", "MT", "WT", "MT", "MT", "MT", 
    "MT", "MT", "WT", "MT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "WT", 
    "WT", "WT", "MT", "MT", "MT", "MT", "MT", "MT", "MT", "WT", 
    "WT", "MT", "WT", "MT", "WT", "MT", "WT", "WT", "MT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "MT", "MT", 
    "MT", "MT", "WT", "WT", "MT", "MT", "MT", "MT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "MT", 
    "MT", "MT", "MT", "MT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "MT", "MT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", 
    "MT", "MT", "MT", "WT", "WT", "MT", "MT", "MT", "MT", "MT", 
    "MT", "MT", "MT", "MT"), gene3 = c("WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "MT", "MT", "MT", "MT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "MT", "MT", "WT", "WT", "MT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "MT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "MT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "MT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "MT", "MT", "MT", "MT", "MT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "MT", 
    "MT", "MT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT"), gene4 = c("WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "MT", "MT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "MT", "MT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "MT", 
    "MT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "MT", "MT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT", 
    "WT", "WT", "WT", "WT", "WT", "WT", "WT", "WT")), row.names = c(NA, 
-280L), class = "data.frame")

Я хочу подсчитать количество каждого фактора в столбцах 2: 5 отдельно для каждого столбца, также разделенного на факторы в столбце1.

Я могу добиться этого для одного столбца на mydata %>% group_by(group) %>% select(gene1) %>% table(), но не для всех столбцов одновременно. Я также хотел бы добавить столбец с процентами для "WT" в конце каждой строки.

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Вы можете преобразовать данные в длинный формат, а затем count вхождение

library(dplyr)

df %>% 
  tidyr::pivot_longer(cols = -group) %>%
  #Or in older version use gather
  #gather(name, value, -group) %>%
  count(group, name, value)

# A tibble: 38 x 4
#   group name  value     n
#   <chr> <chr> <chr> <int>
# 1 K1    gene1 MT       49
# 2 K1    gene1 WT        9
# 3 K1    gene2 MT       46
# 4 K1    gene2 WT       12
# 5 K1    gene3 MT        2
# 6 K1    gene3 WT       56
# 7 K1    gene4 MT        2
# 8 K1    gene4 WT       56
# 9 K2    gene1 MT       15
#10 K2    gene1 WT        3
# … with 28 more rows

Чтобы получить соотношение, которое вы можете сделать

df %>% 
  tidyr::pivot_longer(cols = -group) %>%
  count(group, name, value) %>%
  group_by(group, name) %>%
  mutate(mean_n = n/sum(n))
1 голос
/ 15 октября 2019

Следующий код дает структуру вывода, отличную от примера, но содержит данные для каждой группы каждого столбца:

library(reshape2)

mydata1 = melt(mydata,id.vars = c('group'))

mydata2 = mydata1 %>% 
  dplyr::group_by_all() %>% 
  dplyr::summarise(Count = n()) %>% 
  dplyr::group_by(group,variable) %>% 
  dplyr::mutate(Sum = sum(Count,na.rm=T)) %>% 
  dplyr::ungroup() %>% 
  dplyr::mutate(percentage = Count/Sum*100)

Вывод выглядит следующим образом:

group variable value Count Sum percentage
1   K1  gene1   MT  49  58  84.482759
2   K1  gene1   WT  9   58  15.517241
3   K2  gene1   MT  15  18  83.333333
4   K2  gene1   WT  3   18  16.666667
5   K3  gene1   MT  45  54  83.333333
6   K3  gene1   WT  9   54  16.666667
7   K4  gene1   MT  77  85  90.588235
8   K4  gene1   WT  8   85  9.411765
9   K5  gene1   MT  35  65  53.846154
10  K5  gene1   WT  30  65  46.153846
11  K1  gene2   MT  46  58  79.310345
12  K1  gene2   WT  12  58  20.689655
13  K2  gene2   MT  4   18  22.222222
14  K2  gene2   WT  14  18  77.777778
15  K3  gene2   MT  23  54  42.592593
16  K3  gene2   WT  31  54  57.407407
17  K4  gene2   MT  23  85  27.058824
18  K4  gene2   WT  62  85  72.941176
19  K5  gene2   MT  30  65  46.153846
20  K5  gene2   WT  35  65  53.846154
21  K1  gene3   MT  2   58  3.448276
22  K1  gene3   WT  56  58  96.551724
23  K2  gene3   WT  18  18  100.000000
24  K3  gene3   MT  5   54  9.259259
25  K3  gene3   WT  49  54  90.740741
26  K4  gene3   MT  7   85  8.235294
27  K4  gene3   WT  78  85  91.764706
28  K5  gene3   MT  5   65  7.692308
29  K5  gene3   WT  60  65  92.307692
30  K1  gene4   MT  2   58  3.448276
31  K1  gene4   WT  56  58  96.551724
32  K2  gene4   WT  18  18  100.000000
33  K3  gene4   MT  2   54  3.703704
34  K3  gene4   WT  52  54  96.296296
35  K4  gene4   MT  4   85  4.705882
36  K4  gene4   WT  81  85  95.294118
37  K5  gene4   MT  2   65  3.076923
38  K5  gene4   WT  63  65  96.923077

...