vlambda博客
学习文章列表

R语言 | 数据操作dplyr包

dplyr简介

dplyr是R语言的数据分析包,很像python中的pandas,能对dataframe类型的数据做很方便的数据处理和分析操作。最初我也很奇怪dplyr这个奇怪的名字,我查到其中一种解释

  • d代表dataframe
  • plyr是英文钳子plier的谐音
library(tidyverse)
## ── Attaching packages ────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.1     ✓ purrr   0.3.3
## ✓ tibble  3.0.1     ✓ dplyr   1.0.0
## ✓ tidyr   1.1.0     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ───────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
tidyverse::tidyverse_packages()
##  [1] "broom"      "cli"        "crayon"     "dbplyr"     "dplyr"     
##  [6] "forcats"    "ggplot2"    "haven"      "hms"        "httr"      
## [11] "jsonlite"   "lubridate"  "magrittr"   "modelr"     "pillar"    
## [16] "purrr"      "readr"      "readxl"     "reprex"     "rlang"     
## [21] "rstudioapi" "rvest"      "stringr"    "tibble"     "tidyr"     
## [26] "xml2"       "tidyverse"

读取数据

tidyverse含有readr,所以不用导入readr

#用readr包导入csv数据
aapl <- readr::read_csv('data/aapl.csv'
## Parsed with column specification:
## cols(
##   Date = col_character(),
##   Open = col_double(),
##   High = col_double(),
##   Low = col_double(),
##   Close = col_double(),
##   Volume = col_double()
## )
aapl

R语言 | 数据操作dplyr包


查看数据基本信息

这里使用的是R语言的基本函数,不用导入包就可以使用

数据类型

class(aapl)
## [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"

字段

colnames(aapl)
## [1] "Date"   "Open"   "High"   "Low"    "Close"  "Volume"

记录数、字段数

dim(aapl)
## [1] 251   6

前5条记录

head(aapl, n=5)

R语言 | 数据操作dplyr包


查看dplyr用例

vignette("dplyr")
## starting httpd help server ... done

R语言 | 数据操作dplyr包


dplyr常用函数

Arrange

对appl数据按照字段Volume进行降序排序。为了写作方便,我就不再写完整的调用,在这里arrange()代替 dplyr::arrange()

library(dplyr)
#dplyr::arrange(aapl, -Volume)
arrange(aapl, -Volume)

R语言 | 数据操作dplyr包


管道符 %>%

在dplyr中,有一个管道符%>%,符号左侧表示数据的输入,右侧表示下游数据处理环节。

我们可以用管道符 %>% 改写上面的代码,两种写法得到的运行结果是一致的,用久了会觉得管道符 %>% 可读性更强,后面我们都会用 %>% 来写代码。

aapl %>% arrange(-Volume)

R语言 | 数据操作dplyr包


Select

选取 Date、Close和Volume三列

aapl %>% select(Date, Close, Volume)

R语言 | 数据操作dplyr包


只选取Date、Close和Volume三列,其实另外一种表达方式是“排除Open、High、Low,选择剩下的字段的数据”。

aapl %>% select(-c("Open""High""Low"))

R语言 | 数据操作dplyr包


Filter

按照筛选条件选择数据

#从数据中选择appl股价大于150美元的交易数据
aapl %>% filter(Close>=150)

R语言 | 数据操作dplyr包

从数据中选择appl

  • 股价大于150美元 且 收盘价大于开盘价
    的交易数据
aapl %>% filter((Close>=150) & (Close>Open))

R语言 | 数据操作dplyr包


Mutate

将现有的字段经过计算后生成新字段。

#将最好价High减去最低价Low的结果定义为maxDif,并取log
aapl %>% mutate(maxDif = High-Low,
                log_maxDif=log(maxDif))

R语言 | 数据操作dplyr包

得到记录的位置(行数)

aapl  %>% mutate(n=row_number())

R语言 | 数据操作dplyr包


Group_By

对资料进行分组,这里导入新的 数据集 weather

#导入csv数据
weather <- readr::read_csv('data/weather.csv') %>% as_tibble()
## Parsed with column specification:
## cols(
##   Date = col_character(),
##   city = col_character(),
##   temperature = col_double(),
##   windspeed = col_double(),
##   event = col_character()
## )
weather

R语言 | 数据操作dplyr包

按照城市分组

weather %>% group_by(city)

R语言 | 数据操作dplyr包

为了让大家看到分组的功效,咱们按照城市分别计算平均温度

weather %>% 
    group_by(city) %>% 
    summarise(mean_temperature = mean(temperature))
## `summarise()` ungrouping output (override with `.groups` argument)

weather %>%  
    summarise(mean_temperature = mean(temperature))

R语言相关


近期文章

         
           
           
         
     



     


    台回复关键词【dplyr】获取本文代码和数据

    分享 ”和“ 在看 ”是更好的支持!