数据分析中, 我们有时候会有这样的需求, 比如将已有的数值列,转化为百分位列。
Case study1:
比如说我们有如下表格,代表了ATGC四种碱基的绝对个数。
Base Num
A 1000
T 2000
G 4000
C 5000
我们现在想增加一列,代表各种碱基的百分比,然后用这个百分比去画饼图, 期待的结果如下。
Base Num Percentage
A 1000 8.3%
T 2000 16.7%
G 4000 33.3%
C 5000 41.7%
我们应该怎么操作呢?利用dplyr里面的mutate函数即可。
require(tidyverse)
df <- read.table("~/ATGC.txt", header = T)
df %>%
mutate(Percentage=paste0(round(Num/sum(Num)*100,2),"%"))
Case study2:
当遇到分组变量,想分别计算不同的分组条件下,不同的变量的百分比,该怎么做呢?
我们先构造一个数据集:
gender <- rep(c("male","female"), each=3)
weight <- c(sample(120:180,3),sample(80:100,3))
df2 <- data.frame(gender, weight)
构造的数据集df2内容如下:
> df2
gender weight
1 male 168
2 male 125
3 male 133
4 female 99
5 female 88
6 female 80
我们通过group_by()
函数进行分组操作:
df2 %>%
group_by(gender) %>%
mutate(Percentage=paste0(round(weight/sum(weight)*100,2),"%"))
最终的结果如下:
# A tibble: 6 x 3
# Groups: gender [2]
gender weight Percentage
<fct> <int> <chr>
1 male 168 39.44%
2 male 125 29.34%
3 male 133 31.22%
4 female 99 37.08%
5 female 88 32.96%
6 female 80 29.96%
Done!
网友评论