我有一个数据框如下:
> dfnew
C1 C2 C3 C4 C5 C6
1 A A G A G A
2 A T T T G G
3 T A G A T A
4 C A A A A G
5 C A T T T C
6 C A A A T A
7 T C T G A A
8 G A G C T A
9 C T A T G A
10 G A A A G G
11 G G T T T A
12 G A C T T A
13 T T C T T T
14 A T A G C T
15 A C A A A A
16 A A C A A A
17 T G G A A T
18 A A A A G T
19 G T G G <NA> <NA>
Run Code Online (Sandbox Code Playgroud)
我希望在没有循环的情况下在R中的一行代码中得到如下答案:
A 6 10 7 9 5 10
C 4 2 3 1 1 1
G 5 2 5 3 5 3
T 4 5 4 6 7 4
Run Code Online (Sandbox Code Playgroud)
我们可以用sapply遍历所有的列,将其转换为factor与levels指定的,并得到与频率table
sapply(dfnew, function(x) table(factor(x, levels = c("A", "C", "G", "T"))))
Run Code Online (Sandbox Code Playgroud)
或使用 tidyverse
library(dplyr)
library(tidyr)
dfnew %>%
gather(key, val, na.rm = TRUE) %>%
count(key, val) %>%
spread(key, n)
Run Code Online (Sandbox Code Playgroud)