R语言--高效操作数据框(dplyr包)(2)

2023-10-16 03:50

本文主要是介绍R语言--高效操作数据框(dplyr包)(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文是R语言–高效操作数据框(dplyr包)系列的第二篇,介绍了列重命名、行筛选、行排序、行去重、数据合并等常见操作。

列重命名 rename

rename用来给列重命名,对于复杂情况的重命名特别有效。其中,全部列重命名采用基础方法names实现。

# 数据
tbl_df <- tibble(var1=1:4,var2=2:5,label=c("a","b","a","c"))
  • 单个模式
# 引用方式
tbl_df %>% rename(new_var1=var1,new_var2=var2) 
## # A tibble: 4 x 3
##   new_var1 new_var2 label
##      <int>    <int> <chr>
## 1        1        2 a    
## 2        2        3 b    
## 3        3        4 a    
## 4        4        5 c
# 位置方式
tbl_df %>% rename(new_var1=1,new_var2=2) 
## # A tibble: 4 x 3
##   new_var1 new_var2 label
##      <int>    <int> <chr>
## 1        1        2 a    
## 2        2        3 b    
## 3        3        4 a    
## 4        4        5 c
  • 批量模式
# 全部列
tbl_df %>% rename_all(paste,"new",sep="_") 
## # A tibble: 4 x 3
##   var1_new var2_new label_new
##      <int>    <int> <chr>    
## 1        1        2 a        
## 2        2        3 b        
## 3        3        4 a        
## 4        4        5 c
# 条件列
tbl_df %>% rename_if(is.character,paste,"new",sep="_")
## # A tibble: 4 x 3
##    var1  var2 label_new
##   <int> <int> <chr>    
## 1     1     2 a        
## 2     2     3 b        
## 3     3     4 a        
## 4     4     5 c
# 指定列
tbl_df %>% rename_at(c("var1","var2"),paste,"new",sep="_") 
## # A tibble: 4 x 3
##   var1_new var2_new label
##      <int>    <int> <chr>
## 1        1        2 a    
## 2        2        3 b    
## 3        3        4 a    
## 4        4        5 c
# 基础方法全部列重命名
tbl_df %>% `names<-`(c("new_var1","new_var2","new_label"))
## # A tibble: 4 x 3
##   new_var1 new_var2 new_label
##      <int>    <int> <chr>    
## 1        1        2 a        
## 2        2        3 b        
## 3        3        4 a        
## 4        4        5 c

行筛选 filter

filter函数用来对数据框行进行条件筛选,选择出数据框的子集。

# 数据
tbl_df <- tibble(var1=1:4,var2=2:5,var3=3:6)
  • 单个模式
tbl_df %>% filter(var1>1) # 单条件
## # A tibble: 3 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     2     3     4
## 2     3     4     5
## 3     4     5     6
tbl_df %>% filter(var1>1,var2<5) # 多条件
## # A tibble: 2 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     2     3     4
## 2     3     4     5
tbl_df %>% filter(var1>1 & var2<5) # 多条件(逻辑运算符)
## # A tibble: 2 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     2     3     4
## 2     3     4     5
tbl_df %>% filter(var1>mean(var1)) # 引用列
## # A tibble: 2 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     3     4     5
## 2     4     5     6
var1 <- 3
tbl_df %>% filter(var1>!!var1) # 非引用列
## # A tibble: 1 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     4     5     6
tbl_df %>% filter(row_number()==1) # 第一行
## # A tibble: 1 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     1     2     3
tbl_df %>% filter(row_number()==n()) # 最后一行
## # A tibble: 1 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     4     5     6
tbl_df %>% filter(between(row_number(),2,n())) # 第2到最后一行
## # A tibble: 3 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     2     3     4
## 2     3     4     5
## 3     4     5     6
  • 批量模式
# 全部列
tbl_df %>% filter_all(all_vars(.>1)) # 取交集(.代表任意列)
## # A tibble: 3 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     2     3     4
## 2     3     4     5
## 3     4     5     6
tbl_df %>% filter_all(any_vars(.>1)) # 取并集
## # A tibble: 4 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     1     2     3
## 2     2     3     4
## 3     3     4     5
## 4     4     5     6
# 条件列
tbl_df %>% filter_if(~min(.)>1,all_vars(.>3)) # 条件下取交集
## # A tibble: 2 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     3     4     5
## 2     4     5     6
tbl_df %>% filter_if(~min(.)>1,~.>3) # 结果同上
## # A tibble: 2 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     3     4     5
## 2     4     5     6
# 指定列
tbl_df %>% filter_at(c(1,2),all_vars(.>3))  # 指定列取交集
## # A tibble: 1 x 3
##    var1  var2  var3
##   <int> <int> <int>
## 1     4     5     6

行排序 arrange

arrange函数用来给数据框行排序。

# 数据
tbl_df <- tibble(var1=c(2,3,1,4),var2=2:5,label=c("a","b","a","c"))
  • 单个模式
tbl_df %>% arrange(label) # 单列升序排序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     2     2 a    
## 2     1     4 a    
## 3     3     3 b    
## 4     4     5 c
tbl_df %>% arrange(desc(label)) # 单列降序排序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     4     5 c    
## 2     3     3 b    
## 3     2     2 a    
## 4     1     4 a
tbl_df %>% arrange(label,var1) # 多列组合排序(都升序)
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     1     4 a    
## 2     2     2 a    
## 3     3     3 b    
## 4     4     5 c
tbl_df %>% arrange(label,desc(var1)) # 多列组合排序(label升序,var1降序)
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     2     2 a    
## 2     1     4 a    
## 3     3     3 b    
## 4     4     5 c
  • 批量模式
# 全部列
tbl_df %>% arrange_all() # 升序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     1     4 a    
## 2     2     2 a    
## 3     3     3 b    
## 4     4     5 c
tbl_df %>% arrange_all(desc) # 降序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     4     5 c    
## 2     3     3 b    
## 3     2     2 a    
## 4     1     4 a
# 条件列
tbl_df %>% arrange_if(is.character) # 升序
## 3     3     3 b    
## 4     4     5 c
tbl_df %>% arrange_if(is.character,desc) # 降序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     4     5 c    
## 2     3     3 b    
## 3     2     2 a    
## 4     1     4 a
# 指定列
tbl_df %>% arrange_at(c(1,2)) # 升序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     1     4 a    
## 2     2     2 a    
## 3     3     3 b    
## 4     4     5 c
tbl_df %>% arrange_at(c(1,2),desc) # 降序
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <int> <chr>
## 1     4     5 c    
## 2     3     3 b    
## 3     2     2 a    
## 4     1     4 a

行去重 distinct

distince函数用来给数据框行去重。

# 数据
tbl_df <- tibble(var1=c(1,1,3,4,4),var2=c(2,2,7,8,7),label=c("a","a","b","c","a"))
  • 单个模式
tbl_df %>% distinct() # 全部列整行去重
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <dbl> <chr>
## 1     1     2 a    
## 2     3     7 b    
## 3     4     8 c    
## 4     4     7 a
tbl_df %>% distinct(label) # 单列去重(返回该列)
## # A tibble: 3 x 1
##   label
##   <chr>
## 1 a    
## 2 b    
## 3 c
tbl_df %>% distinct(var1,var2) # 多列去重(返回多列)
## # A tibble: 4 x 2
##    var1  var2
##   <dbl> <dbl>
## 1     1     2
## 2     3     7
## 3     4     8
## 4     4     7
tbl_df %>% distinct(label,.keep_all = TRUE) # 单列去重(返回所有列)
## # A tibble: 3 x 3
##    var1  var2 label
##   <dbl> <dbl> <chr>
## 1     1     2 a    
## 2     3     7 b    
## 3     4     8 c
tbl_df %>% distinct(var1,var2,.keep_all = TRUE) # 多列去重(返回所有列)
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <dbl> <chr>
## 1     1     2 a    
## 2     3     7 b    
## 3     4     8 c    
## 4     4     7 a
tbl_df %>% distinct(diff=var2-var1,.keep_all = TRUE) # 运算后去重(返回所有列)
## # A tibble: 3 x 4
##    var1  var2 label  diff
##   <dbl> <dbl> <chr> <dbl>
## 1     1     2 a         1
## 2     3     7 b         4
## 3     4     7 a         3
  • 批量模式
# 全部列
tbl_df %>% distinct_all(rev) # 整行去重后转置
## # A tibble: 4 x 3
##    var1  var2 label
##   <dbl> <dbl> <chr>
## 1     4     7 a    
## 2     4     8 c    
## 3     3     7 b    
## 4     1     2 a
# 条件列
tbl_df %>% distinct_if(is.numeric) # 数值列去重
## # A tibble: 4 x 2
##    var1  var2
##   <dbl> <dbl>
## 1     1     2
## 2     3     7
## 3     4     8
## 4     4     7
# 指定列
tbl_df %>% distinct_at(c(1,2)) # 指定列去重
## # A tibble: 4 x 2
##    var1  var2
##   <dbl> <dbl>
## 1     1     2
## 2     3     7
## 3     4     8
## 4     4     7

数据框合并 bind_rows/bind_cols

bind_rows和bind_cols函数用来合并数据框。

  • 按行合并
# 数据框
df1 <- tibble(x=1:2,y=2:3)
df2 <- tibble(x=3:4,y=4:5)
# 向量
v1 <- c(x=1,y=2)
v2 <- c(x=3,y=4)
# 应用于数据框
bind_rows(df1,df2) # 单个合并
## # A tibble: 4 x 2
##       x     y
##   <int> <int>
## 1     1     2
## 2     2     3
## 3     3     4
## 4     4     5
bind_rows(list(df1,df2)) # list合并
## # A tibble: 4 x 2
##       x     y
##   <int> <int>
## 1     1     2
## 2     2     3
## 3     3     4
## 4     4     5
# 应用于向量
bind_rows(v1,v2) # 单个合并
## # A tibble: 2 x 2
##       x     y
##   <dbl> <dbl>
## 1     1     2
## 2     3     4
bind_rows(!!!list(v1,v2)) # list合并
## # A tibble: 2 x 2
##       x     y
##   <dbl> <dbl>
## 1     1     2
## 2     3     4
# 向量,数据框混合应用
bind_rows(v1,df1,v2)# 单个合并
## # A tibble: 4 x 2
##       x     y
##   <dbl> <dbl>
## 1     1     2
## 2     1     2
## 3     2     3
## 4     3     4
bind_rows(!!!list(v1,df1,v2)) # list合并
## # A tibble: 4 x 2
##       x     y
##   <dbl> <dbl>
## 1     1     2
## 2     1     2
## 3     2     3
## 4     3     4
# 增加分组名
bind_rows(df1,df2,.id = "group")
## # A tibble: 4 x 3
##   group     x     y
##   <chr> <int> <int>
## 1 1         1     2
## 2 1         2     3
## 3 2         3     4
## 4 2         4     5
  • 按列合并
# 数据框
df1 <- tibble(x=1:2,y=2:3)
df2 <- tibble(a=3:4,b=4:5)
# 应用于数据框
bind_cols(df1,df2) # 枚举多个
## # A tibble: 2 x 4
##       x     y     a     b
##   <int> <int> <int> <int>
## 1     1     2     3     4
## 2     2     3     4     5
bind_cols(list(df1,df2)) # 多个组成list
## # A tibble: 2 x 4
##       x     y     a     b
##   <int> <int> <int> <int>
## 1     1     2     3     4
## 2     2     3     4     5

在这里插入图片描述

这篇关于R语言--高效操作数据框(dplyr包)(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/218840

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表