【澳门葡京备用网址】BMWX3语言数据管理包dplyr,数据管理包

dplyr包是Hadley
威克汉姆的新作,首要用来数据清洗和整治,该包专注dataframe数据格式,从而小幅提升了数额处理速度,并且提供了与此外数据库的接口;tidyr包的撰稿人是Hadley
威克汉姆, 该包用于“tidy”你的数码,那个包常跟dplyr结合使用。

tidyr包的撰稿人是Hadley
威克汉姆。那一个包常跟dplyr结合使用。本文将介绍tidyr包中下述几个函数的用法:

tidyr包的作者是Hadley
Wickham。那个包常跟dplyr结合使用。本文将介绍tidyr包中下述八个函数的用法:

本文将介绍dplyr包的下述八个函数用法:

  • gather—宽数据转为长数据。类似于reshape2包中的melt函数
  • spread—长数据转为宽数据。类似于reshape二包中的cast函数
  • unit—多列合并为一列
  • separate—将1列分别为多列
  • gather—宽数据转为长数据。类似于reshape二包中的melt函数
  • spread—长数据转为宽数据。类似于reshape二包中的cast函数
  • unit—多列合并为壹列
  • separate—将一列分别为多列
  • 筛选: filter()
  • 排列: arrange()
  • 选择: select()
  • 变形: mutate()
  • 汇总: summarise()
  • 分组: group_by()

1.载入包

# 使用datasets包中的mtcars数据集做演示
library(tidyr)
library(dplyr)
head(mtcars)

澳门葡京备用网址 1

# 为方便处理,在数据集中增加一列car
mtcars$car <- rownames(mtcars)
mtcars <- mtcars[, c(12, 1:11)]

View(mtcars)

澳门葡京备用网址 2

1.载入包

# 使用datasets包中的mtcars数据集做演示
library(tidyr)
library(dplyr)
head(mtcars)

澳门葡京备用网址 3

# 为方便处理,在数据集中增加一列car
mtcars$car <- rownames(mtcars)
mtcars <- mtcars[, c(12, 1:11)]

View(mtcars)

澳门葡京备用网址 4

以及tidyr包的下述八个函数用法:

二.gather–宽多少转为长数据

使用gather()函数实现宽表转长表,语法如下:
gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
data:需要被转换的宽形表
key:将原数据框中的所有列赋给一个新变量key
value:将原数据框中的所有值赋给一个新变量value
…:可以指定哪些列聚到同一列中
na.rm:是否删除缺失值

开班接纳:

# 除了car列外,其余列聚合成两列,分别命名为attribute和value
mtcarsNew <- mtcars %>% gather(attribute, value, -car)
head(mtcarsNew)

澳门葡京备用网址 5

如你所见,除了car列外,别的列聚合成两列,分别命名称为attribute和value。tidyr很好的一些是可以只gather若干列而此外列保持不改变。若果您想gather在map和gear之间的装有列而保持carb和car列不变,可以像下边那样做:

# gather在map和gear之间的所有列而保持carb和car列不变
mtcarsNew <- mtcars %>% gather(attribute, value, mpg:gear)
head(mtcarsNew)

澳门葡京备用网址 6

二.gather–宽数目转为长数据

使用gather()函数实现宽表转长表,语法如下:
gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
data:需要被转换的宽形表
key:将原数据框中的所有列赋给一个新变量key
value:将原数据框中的所有值赋给一个新变量value
…:可以指定哪些列聚到同一列中
na.rm:是否删除缺失值

起来选取:

# 除了car列外,其余列聚合成两列,分别命名为attribute和value
mtcarsNew <- mtcars %>% gather(attribute, value, -car)
head(mtcarsNew)

澳门葡京备用网址 7

如您所见,除了car列外,其他列聚合成两列,分别命名字为attribute和value。【澳门葡京备用网址】BMWX3语言数据管理包dplyr,数据管理包。tidyr很好的一些是能够只gather若干列而其余列保持不变。一经您想gather在map和gear之间的全部列而保持carb和car列不改变,能够像下边这样做:

# gather在map和gear之间的所有列而保持carb和car列不变
mtcarsNew <- mtcars %>% gather(attribute, value, mpg:gear)
head(mtcarsNew)

澳门葡京备用网址 8

  • gather—宽数据转为长数据;
  • spread—长数据转为宽数据;
  • unit—多列合并为壹列;
  • separate—将一列分别为多列;

叁.spread–长数码转为宽数据

突发性,为了满意建立模型或绘图的须求,往往供给将长形表转换为宽形表,或将宽形表变为长形表。怎么着贯彻那二种多少表类型的更动。使用spread()函数完结长表转宽表,语法如下:

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:为需要转换的长形表
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值

使用:

mtcarsSpread <- mtcarsNew %>% spread(attribute, value)
head(mtcarsSpread)
                 car carb  mpg cyl disp  hp drat    wt  qsec vs am gear
1        AMC Javelin    2 15.2   8  304 150 3.15 3.435 17.30  0  0    3
2 Cadillac Fleetwood    4 10.4   8  472 205 2.93 5.250 17.98  0  0    3
3         Camaro Z28    4 13.3   8  350 245 3.73 3.840 15.41  0  0    3
4  Chrysler Imperial    4 14.7   8  440 230 3.23 5.345 17.42  0  0    3
5         Datsun 710    1 22.8   4  108  93 3.85 2.320 18.61  1  1    4
6   Dodge Challenger    2 15.5   8  318 150 2.76 3.520 16.87  0  0    3

三.spread–长数量转为宽数据

神跡,为了满意建立模型或绘图的要求,往往必要将长形表转变为宽形表,或将宽形表变为长形表。如何贯彻那三种多少表类型的调换。使用spread()函数达成长表转宽表,语法如下:

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:为需要转换的长形表
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值

使用:

mtcarsSpread <- mtcarsNew %>% spread(attribute, value)
head(mtcarsSpread)
                 car carb  mpg cyl disp  hp drat    wt  qsec vs am gear
1        AMC Javelin    2 15.2   8  304 150 3.15 3.435 17.30  0  0    3
2 Cadillac Fleetwood    4 10.4   8  472 205 2.93 5.250 17.98  0  0    3
3         Camaro Z28    4 13.3   8  350 245 3.73 3.840 15.41  0  0    3
4  Chrysler Imperial    4 14.7   8  440 230 3.23 5.345 17.42  0  0    3
5         Datsun 710    1 22.8   4  108  93 3.85 2.320 18.61  1  1    4
6   Dodge Challenger    2 15.5   8  318 150 2.76 3.520 16.87  0  0    3

 dplyr、tidyr包安装及载入

install.packages("dplyr")
install.packages("tidyr")

library(dplyr)
library(tidyr)

运用datasets包中的mtcars数据集做演示,首先将过长的多寡整理成温馨的tbl_df数据:

mtcars_df = tbl_df(mtcars)

四.unite–多列合并为1列

澳门葡京备用网址 ,unite的调用格式如下:

unite(data, col, …, sep = “_”, remove = TRUE)
data:为数据框
col:被组合的新列名称
…:指定哪些列需要被组合
sep:组合列之间的连接符,默认为下划线
remove:是否删除被组合的列

其功能是将多列合并为1列,比方如下:

# 虚构一些数据
set.seed(1)
date <- as.Date('2016-01-01') + 0:14
hour <- sample(1:24, 15)
min <- sample(1:60, 15)
second <- sample(1:60, 15)
event <- sample(letters, 15)
data <- data.frame(date, hour, min, second, event)
View(data)

澳门葡京备用网址 9

# 把date,hour,min和second列合并为新列datetime
# R中的日期时间格式为"Year-Month-Day-Hour:Min:Second"
dataNew <- data %>%
  unite(datehour, date, hour, sep = ' ') %>%
  unite(datetime, datehour, min, second, sep = ':')
View(dataNew)

澳门葡京备用网址 10

肆.unite–多列合并为1列

unite的调用格式如下:

unite(data, col, …, sep = “_”, remove = TRUE)
data:为数据框
col:被组合的新列名称
…:指定哪些列需要被组合
sep:组合列之间的连接符,默认为下划线
remove:是否删除被组合的列

其职能是将多列合并为一列,举例如下:

# 虚构一些数据
set.seed(1)
date <- as.Date('2016-01-01') + 0:14
hour <- sample(1:24, 15)
min <- sample(1:60, 15)
second <- sample(1:60, 15)
event <- sample(letters, 15)
data <- data.frame(date, hour, min, second, event)
View(data)

澳门葡京备用网址 11

# 把date,hour,min和second列合并为新列datetime
# R中的日期时间格式为"Year-Month-Day-Hour:Min:Second"
dataNew <- data %>%
  unite(datehour, date, hour, sep = ' ') %>%
  unite(datetime, datehour, min, second, sep = ':')
View(dataNew)

澳门葡京备用网址 12

dplyr包基本操作

5.separate–将1列分别为多列

separate()函数可将一列拆分为多列,一般可用以日志数据或日期时间型数据的拆分,语法如下:

separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
convert = FALSE, extra = “warn”, fill = “warn”, …)
data:为数据框
col:需要被拆分的列
into:新建的列名,为字符串向量
sep:被拆分列的分隔符
remove:是否删除被分割的列 

例如如下:

# 可以用separate函数将数据恢复到刚创建的时候
# 首先,将datetime分为date列和time列 然后,将time列分为hour,min,second列
data1 <- dataNew %>% 
  separate(datetime, c('date', 'time'), sep = ' ') %>% 
  separate(time, c('hour', 'min', 'second'), sep = ':')
data1

澳门葡京备用网址 13

五.separate–将1列分别为多列

separate()函数可将1列拆分为多列,一般可用以日志数据或日期时间型数据的拆分,语法如下:

separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
convert = FALSE, extra = “warn”, fill = “warn”, …)
data:为数据框
col:需要被拆分的列
into:新建的列名,为字符串向量
sep:被拆分列的分隔符
remove:是否删除被分割的列 

比如如下:

# 可以用separate函数将数据恢复到刚创建的时候
# 首先,将datetime分为date列和time列 然后,将time列分为hour,min,second列
data1 <- dataNew %>% 
  separate(datetime, c('date', 'time'), sep = ' ') %>% 
  separate(time, c('hour', 'min', 'second'), sep = ':')
data1

澳门葡京备用网址 14

 1.1 筛选: filter()

按给定的逻辑判定筛选出符合须要的子数据集

filter(mtcars_df,mpg==21,hp==110)

#  A tibble: 2 x 11
    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1    21     6   160   110   3.9 2.620 16.46     0     1     4     4
2    21     6   160   110   3.9 2.875 17.02     0     1     4     4

陆.tidyr包0.5.0本子新特色

当前tidyr包已履新至0.5.一版本,接下去大致介绍0.五.0本子中八个有效的新特色:

策画干活:

library('tidyr')
library(tibble)

注:为了保障跟原作一样,本文用的是data.frame的简洁版data_frame。需加载tibble包。

四个新特性

(1)separate_rows():通过分隔符将那个含有多少个值的字段拆分为多行。

separate_rows(data, ..., sep = "[^[:alnum:].]+", convert = FALSE)
data:数据
...:需要被拆分的列
sep:分隔符

以身作则操作:

df <- data_frame(x = 1:2,y = c("a,b","d,e,f"));df
df %>% separate_rows(y,sep = ",")

澳门葡京备用网址 15 
澳门葡京备用网址 16

df %>% separate(y,c("y1","y2","y3"),sep = ",",fill = "right")

澳门葡京备用网址 17

(二)spread()函数扩张了3个sep参数:用于将列名设置为“key|sep|value”格式。那在对字段为数值型数据做重塑时尤其实用。

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE,sep = NULL)
data:为需要转换的长形表
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
sep:用于将列名设置为“key|sep|value”格式

示例:

df <- data_frame(x = c(1,2,1),
                 key = c(1,1,2),
                 val = c("a","b","c"));df
df %>% spread(key,val)
df %>% spread(key,val,sep = "_")

澳门葡京备用网址 18

澳门葡京备用网址 19

(三)unnest()函数扩充了四个.sep参数。当数据框的多少个列包涵有一致变量名的时候万分实惠:

unnest()嵌套list的列

unnest(data, ..., .drop = NA, .id = NULL, .sep = NULL)
data:数据框
...:要嵌套的列
.id:用于显示列表中定义的名称
.sep:当数据框的多个列包含相同变量名的时候非常有用

使用示例:

df <- data_frame(x = 1:2,
                 y1 = list(data_frame(y = 1),data_frame(y = 2)),
                 y2 = list(data_frame(y = "a"),data_frame(y = "b")))
df
df %>% unnest()
df %>% unnest(.sep = "_")

澳门葡京备用网址 20

同时,unnest()函数增添了.id参数用于展示列表中定义的名称:

df <- data_frame(x = 1:2,
                 y = list(a = 1:3,b = 3:1));df
df %>% unnest()
df %>% unnest(.id = "id")

澳门葡京备用网址 21

 

正文链接:

陆.tidyr包0.5.0本子新特色

眼前tidyr包已更新至0.5.一版本,接下去大致介绍0.五.0本子中三个有效的新特色:

预备职业:

library('tidyr')
library(tibble)

注:为了保持跟原来的小说一样,本文用的是data.frame的简练版data_frame。需加载tibble包。

五个新特色

(1)separate_rows():通过分隔符将那一个饱含多个值的字段拆分为多行。

separate_rows(data, ..., sep = "[^[:alnum:].]+", convert = FALSE)
data:数据
...:需要被拆分的列
sep:分隔符

演示操作:

df <- data_frame(x = 1:2,y = c("a,b","d,e,f"));df
df %>% separate_rows(y,sep = ",")

澳门葡京备用网址 22 
澳门葡京备用网址 23

df %>% separate(y,c("y1","y2","y3"),sep = ",",fill = "right")

澳门葡京备用网址 24

(2)spread()函数扩大了一个sep参数:用于将列名设置为“key|sep|value”格式。那在对字段为数值型数据做重塑时特别实用。

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE,sep = NULL)
data:为需要转换的长形表
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
sep:用于将列名设置为“key|sep|value”格式

示例:

df <- data_frame(x = c(1,2,1),
                 key = c(1,1,2),
                 val = c("a","b","c"));df
df %>% spread(key,val)
df %>% spread(key,val,sep = "_")

澳门葡京备用网址 25

澳门葡京备用网址 26

(叁)unnest()函数增添了1个.sep参数。当数据框的多个列包蕴有同样变量名的时候相当实惠:

unnest()嵌套list的列

unnest(data, ..., .drop = NA, .id = NULL, .sep = NULL)
data:数据框
...:要嵌套的列
.id:用于显示列表中定义的名称
.sep:当数据框的多个列包含相同变量名的时候非常有用

运用示例:

df <- data_frame(x = 1:2,
                 y1 = list(data_frame(y = 1),data_frame(y = 2)),
                 y2 = list(data_frame(y = "a"),data_frame(y = "b")))
df
df %>% unnest()
df %>% unnest(.sep = "_")

澳门葡京备用网址 27

再者,unnest()函数增添了.id参数用于呈现列表中定义的名称:

df <- data_frame(x = 1:2,
                 y = list(a = 1:3,b = 3:1));df
df %>% unnest()
df %>% unnest(.id = "id")

澳门葡京备用网址 28

 

本文链接:

 1.2 排列: arrange()

按给定的列名依次对行实行排序:

arrange(mtcars_df, disp) #可对列名加 desc(disp) 进行倒序

# A tibble: 32 x 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1   33.9     4  71.1    65  4.22 1.835 19.90     1     1     4     1
2   30.4     4  75.7    52  4.93 1.615 18.52     1     1     4     2
3   32.4     4  78.7    66  4.08 2.200 19.47     1     1     4     1
4   27.3     4  79.0    66  4.08 1.935 18.90     1     1     4     1
5   30.4     4  95.1   113  3.77 1.513 16.90     1     1     5     2
6   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
7   21.5     4 120.1    97  3.70 2.465 20.01     1     0     3     1
8   26.0     4 120.3    91  4.43 2.140 16.70     0     1     5     2
9   21.4     4 121.0   109  4.11 2.780 18.60     1     1     4     2
10  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
# ... with 22 more rows

 1.3 选择: select()

用列名作参数来选芭乐数据集:

select(mtcars_df, disp:wt)

# A tibble: 32 x 4
    disp    hp  drat    wt
*  <dbl> <dbl> <dbl> <dbl>
1  160.0   110  3.90 2.620
2  160.0   110  3.90 2.875
3  108.0    93  3.85 2.320
4  258.0   110  3.08 3.215
5  360.0   175  3.15 3.440
6  225.0   105  2.76 3.460
7  360.0   245  3.21 3.570
8  146.7    62  3.69 3.190
9  140.8    95  3.92 3.150
10 167.6   123  3.92 3.440
# ... with 22 more rows

 1.4 变形: mutate()

对已有列进行数量运算并增多为新列:

mutate(mtcars_df,
  NO = 1:dim(mtcars_df)[1])  

# A tibble: 32 x 12
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb    NO
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
1   21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4     1
2   21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4     2
3   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     3
4   21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1     4
5   18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2     5
6   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1     6
7   14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4     7
8   24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2     8
9   22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2     9
10  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4    10
# ... with 22 more rows

 1.5 汇总: summarise()

对数据框调用别的函数进行集中操作, 再次来到壹维的结果:

summarise(mtcars_df, 
    mdisp = mean(disp, na.rm = TRUE))
# A tibble: 1 x 1
     mdisp
     <dbl>
1 230.7219

 1.6 分组: group_by()

当对数据集通过group_by()加多了分组音讯后,mutate(),arrange() 和
summarise() 函数会自动对这个 tbl 类数据实践分组操作。

cars <- group_by(mtcars_df, cyl)
countcars <- summarise(cars, count = n()) # count = n()用来计算次数

# A tibble: 3 x 2
    cyl count
  <dbl> <int>
1     4    11
2     6     7
3     8    14

tidyr包基本操作

 2.1 宽转长:gather()

采纳gather()函数完结宽表转长表,语法如下:

gather(data, key, value, …, na.rm = FALSE, convert = FALSE)
data:需要被转换的宽形表
key:将原数据框中的所有列赋给一个新变量key
value:将原数据框中的所有值赋给一个新变量value
…:可以指定哪些列聚到同一列中
na.rm:是否删除缺失值

widedata <- data.frame(person=c('Alex','Bob','Cathy'),grade=c(2,3,4),score=c(78,89,88))
widedata
  person grade score
1   Alex     2    78
2    Bob     3    89
3  Cathy     4    88
longdata <- gather(widedata, variable, value,-person)
longdata
  person variable value
1   Alex    grade     2
2    Bob    grade     3
3  Cathy    grade     4
4   Alex    score    78
5    Bob    score    89
6  Cathy    score    88

 2.2 长转宽:spread()

奇迹,为了满意建模或绘图的供给,往往须要将长形表调换为宽形表,或将宽形表变为长形表。怎么样兑现那三种多少表类型的调换。使用spread()函数完结长表转宽表,语法如下:

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:为需要转换的长形表
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值

mtcarsSpread <- mtcarsNew %>% spread(attribute, value)
head(mtcarsSpread)
                 car am carb cyl disp drat gear  hp  mpg  qsec vs    wt
1        AMC Javelin  0    2   8  304 3.15    3 150 15.2 17.30  0 3.435
2 Cadillac Fleetwood  0    4   8  472 2.93    3 205 10.4 17.98  0 5.250
3         Camaro Z28  0    4   8  350 3.73    3 245 13.3 15.41  0 3.840
4  Chrysler Imperial  0    4   8  440 3.23    3 230 14.7 17.42  0 5.345
5         Datsun 710  1    1   4  108 3.85    4  93 22.8 18.61  1 2.320
6   Dodge Challenger  0    2   8  318 2.76    3 150 15.5 16.87  0 3.520

 2.3 合并:unit()

unite的调用格式如下:

unite(data, col, …, sep = “_”, remove = TRUE)
data:为数据框
col:被组合的新列名称
…:指定哪些列需要被组合
sep:组合列之间的连接符,默认为下划线
remove:是否删除被组合的列

wideunite<-unite(widedata, information, person, grade, score, sep= "-")
wideunite
  information
1   Alex-2-78
2    Bob-3-89
3  Cathy-4-88

 2.4 拆分:separate()

separate()函数可将1列拆分为多列,一般可用来日志数据或日期时间型数据的拆分,语法如下:

separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE,
convert = FALSE, extra = “warn”, fill = “warn”, …)
data:为数据框
col:需要被拆分的列
into:新建的列名,为字符串向量
sep:被拆分列的分隔符
remove:是否删除被分割的列 

widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-")
widesep
  person grade score
1   Alex     2    78
2    Bob     3    89
3  Cathy     4    88

可知separate()函数和unite()函数的功用相反。

汇报与提议

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website