r语言集合补集_R语言学习笔记(14)-常用包

一、reshape2包对数据格式进行转换

> x

+ data = 1:5)

> y

+ data = 1:5)

> x

k1 k2 data

1 NA 1 1

2 NA NA 2

3 3 NA 3

4 4 4 4

5 5 5 5

> y

k1 k2 data

1 NA NA 1

2 2 NA 2

3 NA 3 3

4 4 4 4

5 5 5 5

如上两个数据框,无法直接用

rbind和cbind进行合并,会乱

merge()处理

可以根据一个或多个公有的向量进行合并

#根据k1进行合并

> merge(x,y,by = "k1")

k1 k2.x data.x k2.y data.y

1 4 4 4 4 4

2 5 5 5 5 5

3 NA 1 1 NA 1

4 NA 1 1 3 3

5 NA NA 2 NA 1

6 NA NA 2 3 3

#incomparable = T,表示丢掉NA

>> merge(x, y, by = "k2",incomparables = NA)

> merge(x, y, by = "k2",incomparables = NA)

k2 k1.x data.x k1.y data.y

1 4 4 4 4 4

2 5 5 5 5 5

#根据k1,k2进行合并

> merge(x, y, by = c("k1","k2"))

k1 k2 data.x data.y

1 4 4 4 4

2 5 5 5 5

3 NA NA 2 1

reshape包

reshape包重构整个数据的万能数据包,最新的是reshape2

> install.packages("reshape2")

> library(reshape2)

#与Excel中数据透视表功能类似

> help(package = "reshape2")

722b456ec235

help_reshape2.png

(1)melt对宽数据进行处理,得到长数据

> head(airquality)

Ozone Solar.R Wind Temp Month Day

1 41 190 7.4 67 5 1

2 36 118 8.0 72 5 2

3 12 149 12.6 74 5 3

4 18 313 11.5 62 5 4

5 NA NA 14.3 56 5 5

6 28 NA 14.9 66 5 6

#将列名首字母改为小写

> names(airquality)

> head(airquality)

ozone solar.r wind temp month day

1 41 190 7.4 67 5 1

2 36 118 8.0 72 5 2

3 12 149 12.6 74 5 3

4 18 313 11.5 62 5 4

5 NA NA 14.3 56 5 5

6 28 NA 14.9 66 5 6

#使用melt函数处理数据

> melt(airquality)

> aql

#融合后,每一行都是标识符和变量的组合,不能有重复项。数据变为三列。

#其中variable是因子类型

#这也就是宽数据变为长数据的过程

> head(aql)

variable value

1 ozone 41

2 ozone 36

3 ozone 12

4 ozone 18

5 ozone NA

6 ozone 28

> head(aql,50)

variable value

1 ozone 41

2 ozone 36

3 ozone 12

4 ozone 18

5 ozone NA

6 ozone 28

7 ozone 23

8 ozone 19

9 ozone 8

10 ozone NA

11 ozone 7

12 ozone 16

13 ozone 11

14 ozone 14

15 ozone 18

16 ozone 14

17 ozone 34

18 ozone 6

19 ozone 30

20 ozone 11

21 ozone 1

22 ozone 11

23 ozone 4

24 ozone 32

25 ozone NA

26 ozone NA

27 ozone NA

28 ozone 23

29 ozone 45

30 ozone 115

31 ozone 37

32 ozone NA

33 ozone NA

34 ozone NA

35 ozone NA

36 ozone NA

37 ozone NA

38 ozone 29

39 ozone NA

40 ozone 71

41 ozone 39

42 ozone NA

43 ozone NA

44 ozone 23

45 ozone NA

46 ozone NA

47 ozone 21

48 ozone 37

49 ozone 20

50 ozone 12

#需要设置,month和day是用来当做ID,其余四个作为变量值。

#ID就是用来区分不同行数之间的变量

#重要!需要区分哪部分作为行的观测值,哪部分作为列的观测值

> aql

> head(aql,50)

month day variable value

1 5 1 ozone 41

2 5 2 ozone 36

3 5 3 ozone 12

4 5 4 ozone 18

5 5 5 ozone NA

6 5 6 ozone 28

7 5 7 ozone 23

8 5 8 ozone 19

9 5 9 ozone 8

10 5 10 ozone NA

11 5 11 ozone 7

12 5 12 ozone 16

13 5 13 ozone 11

14 5 14 ozone 14

15 5 15 ozone 18

16 5 16 ozone 14

17 5 17 ozone 34

18 5 18 ozone 6

19 5 19 ozone 30

20 5 20 ozone 11

21 5 21 ozone 1

22 5 22 ozone 11

23 5 23 ozone 4

24 5 24 ozone 32

25 5 25 ozone NA

26 5 26 ozone NA

27 5 27 ozone NA

28 5 28 ozone 23

29 5 29 ozone 45

30 5 30 ozone 115

31 5 31 ozone 37

32 6 1 ozone NA

33 6 2 ozone NA

34 6 3 ozone NA

35 6 4 ozone NA

36 6 5 ozone NA

37 6 6 ozone NA

38 6 7 ozone 29

39 6 8 ozone NA

40 6 9 ozone 71

41 6 10 ozone 39

42 6 11 ozone NA

43 6 12 ozone NA

44 6 13 ozone 23

45 6 14 ozone NA

46 6 15 ozone NA

47 6 16 ozone 21

48 6 17 ozone 37

49 6 18 ozone 20

50 6 19 ozone 12

(2)cast将长数据变为宽数据

reshape2将cast分为了几种

①dcast:处理数据框,读取melt的结果,根据提供的公式进行数据融合。

722b456ec235

cast.png

参数:formula,融合后的数据格式。

"~"在R找那个表示相关联,说明而这有关系,但不一定是相等

#重录数据

> aqw

> head(aqw)

month ozone solar.r wind temp

1 5 23.61538 181.2963 11.622581 65.54839

2 6 29.44444 190.1667 10.266667 79.10000

3 7 59.11538 216.4839 8.941935 83.90323

4 8 59.96154 171.8571 8.793548 83.96774

5 9 31.44828 167.4333 10.180000 76.90000

#fun.aggregate也可以设置为sum等其他函数

> aqw

> head(aqw)

month ozone solar.r wind temp

1 5 614 4895 360.3 2032

2 6 265 5705 308.0 2373

3 7 1537 6711 277.2 2601

4 8 1559 4812 272.6 2603

5 9 912 5023 305.4 2307

②acast:返回向量,矩阵或数组

二、tidyr&dplyr数据转换

这两个包相对于reshape2,操作更加简便。

安装:

> install.packages(c("tidyr","dplyr"))

> library(tidyr)

> library(dplyr)

tidyr包(Tidy Messy Data)

Overview

The goal of tidyr is to help you create tidy data. Tidy data is data where:

Every column is variable.

Every row is an observation.

Every cell is a single value.

Tidy data describes a standard way of storing data that is used wherever possible throughout the tidyverse. If you ensure that your data is tidy, you’ll spend less time fighting with the tools and more time working on your analysis. Learn more about tidy data in [vignette("tidy-data")](https://tidyr.tidyverse.org/articles/tidy-data.html)

(1)gather(),将宽数据转化为长数据,类似reshape2的melt()

(2)spread(),将长数据转化为宽数据,类似reshape2的cast()

(3)unit(),将多列合并为一列

(4)separate(),将一列分为多列

以mtcars数据集作为演示

#mtcars每一列是变量,每一行是观测值

#取部分数据进行演示

> tdata

#汽车名是以行名存在的,对数据进行处理,将行名添加到数据中

> tdata

names mpg cyl disp

Mazda RX4 Mazda RX4 21.0 6 160.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值