浅谈R利器之dplyr包

转载自品略图书馆 http://www.pinlue.com/article/2020/07/0412/0010968792349.html

 

给大家逐一介绍R的几种利器包(package),如dplyr(数据处理神包)、ggplot2(画图神器)、shiny(网页开发神包)、rvest(网络数据爬取)、sp(地理数据分析包)等。也会给大家介绍R读取二进制、GRIB、NC等格式数据,驱动HYSPLIT模型等的实战。

     今天我们从dplyr开始。 

    dplyr包主要用于数据的清洗和分析。先眼熟一下dplyr包中的几个常用函数:filter、select、mutate、arrange、join、%>%、summarize、bind_rows(cols)

    老规矩,要想使用这个包,得先安装再加载

  •  
  •  
  •  
  •  
#安装dplyr包install.packages("dplyr")#加载dplyr包library("dplyr")

1、filter

    filter可用于数据的筛选,从某一数据框中取出符合条件的子集。话不多说,且看如下实例:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#读取名字为test_1.csv的数据到R中,成为data.frame。test = read.csv("D:\\R_EXAMPLE\\test_1.csv")#筛选PM2.5浓度大于75的数据data = filter(test,PM2.5 >=75)#筛选PM2.5浓度大于75、小于150的数据data = filter(test,PM2.5 >= 75 & PM2.5 <= 150)#筛选PM2.5浓度大于75或SO2浓度小于50的数据data = filter(test,PM2.5 >= 75 | SO2 <= 50)

2、select

    从数据框中选择指定的列。

  •  
  •  
  •  
  •  
  •  
#选择SO2和PM2.5列data = select(test,SO2,PM2.5)#选择所有列,除了PM2.5列data = select(test,-PM2.5)

 3、mutate

    对某一数据列使用指定的公式,生成新的数据列。

  •  
  •  
#将PM2.5列和SO2列相加,生成新的一列newdata = mutate(test,new = PM2.5 + SO2)

4、arrange

    根据一个变量或多个变量进行排序,如下面实例:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#将test数据框按照PM2.5大小升序data = arrange(test,PM2.5)#将test数据框按照PM2.5大小降序data = arrange(test,desc(PM2.5))#将test数据框按照PM2.5和SO2升序(先PM2.5,再SO2)data = arrange(test,PM2.5,SO2)

5、summarize

    对数据进行汇总,比如求和、计算平均值等。R中常见的统计函数有:

min():求最小值、max():求最大值、mean():求均值、sum():求总和、sd():求标准差、var():求方差、median():求中位数、quantile(a, b):求a的第b个分位数。实例如下:

  •  
  •  
#求SO2的平均值和PM2.5的标准差summarize(test,so2_mean = mean(test$SO2),pm25_sd = sd(test$PM2.5))

6、%>%

    这个符号初看起来很怪,其实大有用处。它是管道符号的一种。把符号左边的东西传递给右侧的函数或表达式。可能有点费解,且看实例:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#比如我们想先从test中取出PM2.5列,然后对此列排序。按照我们上面介绍的方法,需两步:#第一步,选择数据data = select(test,PM2.5)#第二步,排序data_a = arrange(data)#现在用%>%符号,只需一步即可搞定:data = select(test,PM2.5) %>% arrange()

    %>%的连接没有个数限制,可以一直往下传递。此符号可缩短代码量、减少中间变量,在处理大数据时可节省内存空间。

7、join

    将两组数组,按照某一相同的规则连接起来。

    左联:left_join

  •  
  •  
  •  
  •  
  •  
  •  
  •  
#生成两个数据框a和b。a表示五个学生的身高,b表示五个学生的体重a = data.frame(name = c("小明","小李","小王","小赵","小刘"),height = c(120,130,125,135,115))b = data.frame(name = c("小王","小赵","小刘","小明","小李"),weight = c(40,44,42,45,39))#可以看到,a和b有一个相同的name列,并且名字一样(顺序不同)#将两个数据框联合起来#左联data = left_join(a, b, by="name")

    右联:right_join

  •  
  •  
#右联data = right_join(a, b, by="name")

    内联:inner_join

  •  
  •  
  •  
  •  
  •  
  •  
#生成两个数据框a和b。a表示五个学生的身高,b表示五个学生的体重a = data.frame(name = c("小明","小李","小王","小赵","小刘"),height = c(120,130,125,135,115))b = data.frame(name = c("小王","小赵","小刘","小孙","小吴"),weight = c(40,44,42,45,39))#可以看到,a和b有一个相同的name列,但名字不一样#内联data = inner_join(a, b, by="name")

8、bind_rows(cols)

    将数据框按行或按列合并。按行合并需要两个数据框列相同,按列合并需要两个数据框行相同。

  •  
  •  
  •  
  •  
  •  
  •  
#生成两个数据框a和b。a和b具有相同的列a = data.frame(name = c("小明","小李","小王","小赵","小刘"),height = c(120,130,125,135,115))b = data.frame(name = c("小周","小陈","小杨","小孙","小吴"),height = c(40,44,42,45,39))#按行合并data = bind_rows(a, b)

 

  •  
  •  
  •  
  •  
  •  
  •  
#生成两个数据框a和b。a和b具有相同的行a = data.frame(name = c("小明","小李","小王","小赵","小刘"),weight = c(120,130,125,135,115))b = data.frame(name = c("小明","小李","小王","小赵","小刘"),height = c(40,44,42,45,39))#按列合并data = bind_cols(a, b)  

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值