day6- “dplyr“的安装和使用

本文介绍了如何在R语言中使用dplyr包进行数据安装、管理和操作,包括安装包、加载库、数据处理函数如select、filter、group_by、summarise、arrange和mutate,以及数据框连接方法如inner_join、left_join、full_join、semi_join和数据合并技巧。

安装

命令是install.packages/BioManager::install,使用哪个取决于需要安装的包在CRAN网站还是Biocductor

安装完成后需要使用library或者require加载,之后才能使用。

dplyr

是R中专门用于数据处理的包。具体功能包括:

  • select() 从数据中选择列
  • filter() 数据行的子集
  • group_by() 汇总数据
  • summarise() 汇总数据(计算汇总统计信息)
  • arrange() 排序数据
  • mutate() 创建新变量

两个实用技能

1. 管道操作 %>% (ctrl + shift + M)

加载任意一个tidyverse包即可用管道符
test %>% group_by(Species) %>% summarise(mean(Sepal.Length),sd(Sepal.Length))

2. count统计某列的unique值

1. mutate()

新增列。使用方式:
mutate(test,new = Sepal.Length * Spepal.Width)
先使用内置的iris数据来看看 ,由于直接打印有点乱这里将其转化为.tibble 其有点是将数据框以更好的格式打印出来。

> test1 <- as_tibble(test)
> print(test1)
# A tibble: 6 × 5
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
         <dbl>       <dbl>        <dbl>       <dbl> <fct>     
1          5.1         3.5          1.4         0.2 setosa    
2          4.9         3            1.4         0.2 setosa    
3          7           3.2          4.7         1.4 versicolor
4          6.4         3.2          4.5         1.5 versicolor
5          6.3         3.3          6           2.5 virginica 
6          5.8         2.7          5.1         1.9 virginica 
> 

然后我们使用mutate()函数给这个表的最后加上一列:

 test1 <- mutate(test1,new = Sepal.Length * Sepal.Width)
> print(test1)
# A tibble: 6 × 6
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species      new
         <dbl>       <dbl>        <dbl>       <dbl> <fct>      <dbl>
1          5.1         3.5          1.4         0.2 setosa      17.8
2          4.9         3            1.4         0.2 setosa      14.7
3          7           3.2          4.7         1.4 versicolor  22.4
4          6.4         3.2          4.5         1.5 versicolor  20.5
5          6.3         3.3          6           2.5 virginica   20.8
6          5.8         2.7          5.1         1.9 virginica   15.7
> 

2.select()

按列筛选 基本语法:

  1. 按列号筛选
    select(test, 1)
  2. 按列名
    select(test, Petal.Length, Petal.Width)

3. filter()

筛选行
filter(test, Species == "setosa")
filter(test,Species == "setosa"&Spetal.Length > 5)

4. arrange()

按某列或某几列对整个表格进行排序
arrange(test, Sepal.Length) 默认从小到大

arrange(test, dec(Sepal.Length)) 从大到小

5. summarise()

汇总,可以结合group_by 更强大

summarise(test, mean(Sepal.Length), sd(Sepal.Length))# 计算Sepal.Length的平均值和标准差
##   mean(Sepal.Length) sd(Sepal.Length)
## 1           5.916667        0.8084965
# 先按照Species分组,计算每组Sepal.Length的平均值和标准差
group_by(test, Species)
## # A tibble: 6 x 5
## # Groups:   Species [3]
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
## *        <dbl>       <dbl>        <dbl>       <dbl> <fct>     
## 1          5.1         3.5          1.4         0.2 setosa    
## 2          4.9         3            1.4         0.2 setosa    
## 3          7           3.2          4.7         1.4 versicolor
## 4          6.4         3.2          4.5         1.5 versicolor
## 5          6.3         3.3          6           2.5 virginica 
## 6          5.8         2.7          5.1         1.9 virginica
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))
## # A tibble: 3 x 3
##   Species    `mean(Sepal.Length)` `sd(Sepal.Length)`
##   
## 1 setosa                     5                 0.141
## 2 versicolor                 6.7               0.424
## 3 virginica                  6.05              0.354

dplyr处理关系数据

data.frame(x = c(),y=())
上代码会将两个向量以列的形式合并

test1 <- data.frame(x = c('b','e','f','x'), 
                    z = c("A","B","C",'D'))
test1
##   x z
## 1 b A
## 2 e B
## 3 f C
## 4 x D
test2 <- data.frame(x = c('a','b','c','d','e','f'), 
                    y = c(1,2,3,4,5,6))
test2 
##   x y
## 1 a 1
## 2 b 2
## 3 c 3
## 4 d 4
## 5 e 5
## 6 f 6

1. inner_join 取交集

2. left_join 左连

left_join(test1, test2, by = 'x')
##   x z  y
## 1 b A  2
## 2 e B  5
## 3 f C  6
## 4 x D NA
left_join(test2, test1, by = 'x')
##   x y    z
## 1 a 1 
## 2 b 2    A
## 3 c 3 
## 4 d 4 
## 5 e 5    B
## 6 f 6    C

以上代码的是指将 test1 数据框与 test2 数据框按照列 ‘x’ 进行连接。左连接会保留左边数据框(test1)的所有行,并将右边数据框(test2)中与左边数据框匹配的行进行连接。如果没有匹配的行,那么连接后的结果会用 NA 填充

  • x’ 列中的 ‘b’ 和 ‘e’ 在 test1 中都有,所以它们在连接后的结果中保留了下来。
  • ‘f’ 列中的 ‘f’ 在 test1 中有,但在 test2 中没有匹配,所以 ‘f’ 对应的 ‘z’ 和 ‘y’ 列都是 NA。
  • ‘x’ 列中的 ‘x’ 在 test1 中有,但在 test2 中没有匹配,所以 ‘x’ 对应的 ‘z’ 和 ‘y’ 列都是 NA。

3. 全连 full_join

将 test1 数据框与 test2 数据框按照列 ‘x’ 进行连接。全连接会保留两个数据框中的所有行,并将匹配的行进行连接。如果没有匹配的行,连接后的结果会用 NA 填充。

4. semi_join半连接 返回能够与y表匹配的x表所有记录

semi_join(x = test1, y = test2, by = 'x')
##   x z
## 1 b A
## 2 e B
## 3 f C

5. anti_join 返回无法匹配的x表的所有记录

6. 简单合并

相当于base包里的cbind()和rbind(),bind_rows()函数需要两个表格列数相同,而bind_cols()函数则需要两个数据框有相同的行数。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值