R语言数据集行列互换技巧

Python014

R语言数据集行列互换技巧,第1张

R语言数据集行列互换技巧

现在给大家介绍的数据处理技巧是长转宽,也就相当于Excel中的转置,不过用R语言实现的长转宽还有数据合并的功能,自然比Excel强大多了。

这里给大家介绍4个函数,其中melt()、dcast()来自reshape2包,gather()、spread()来自tidyr包

一、宽转长——melt()、gather()

[python] view plain copy

mydata<-data.frame(

name=c("store1","store2","store3","store4"),

address=c("普陀区","黄浦区","徐汇区","浦东新区"),

sale2014=c(3000,2500,2100,1000),

sale2015=c(3020,2800,3900,2000),

sale2016=c(5150,3600,2700,2500),

sale2017=c(4450,4100,4000,3200)

)

#宽转长——melt

mydata1<-melt(

mydata,

id.vars=c("address","name"),#要保留的主字段

variable.name = "Year",#转换后的分类字段名称(维度)

value.name = "Sale" #转换后的度量值名称

)

输出结果

[python] view plain copy

>mydata1<-melt(

+ mydata,

+ id.vars=c("address","name"),#要保留的主字段

+ variable.name = "Year",#转换后的分类字段名称(维度)

+ value.name = "Sale" #转换后的度量值名称

+ )

>mydata1

address name Year Sale

1普陀区 store1 sale2014 3000

2黄浦区 store2 sale2014 2500

3徐汇区 store3 sale2014 2100

4 浦东新区 store4 sale2014 1000

5普陀区 store1 sale2015 3020

6黄浦区 store2 sale2015 2800

7徐汇区 store3 sale2015 3900

8 浦东新区 store4 sale2015 2000

9普陀区 store1 sale2016 5150

10 黄浦区 store2 sale2016 3600

11 徐汇区 store3 sale2016 2700

12 浦东新区 store4 sale2016 2500

13 普陀区 store1 sale2017 4450

14 黄浦区 store2 sale2017 4100

15 徐汇区 store3 sale2017 4000

16 浦东新区 store4 sale2017 3200

再来看看gather()函数怎么用

[python] view plain copy

>#宽转长——gather

>mydata1<-tidyr::gather(

+ data=mydata,

+ key="Year",

+ value="sale",

+ sale2014:sale2017

+ )

>mydata1

name address Year sale

1 store1 普陀区 sale2014 3000

2 store2 黄浦区 sale2014 2500

3 store3 徐汇区 sale2014 2100

4 store4 浦东新区 sale2014 1000

5 store1 普陀区 sale2015 3020

6 store2 黄浦区 sale2015 2800

7 store3 徐汇区 sale2015 3900

8 store4 浦东新区 sale2015 2000

9 store1 普陀区 sale2016 5150

10 store2 黄浦区 sale2016 3600

11 store3 徐汇区 sale2016 2700

12 store4 浦东新区 sale2016 2500

13 store1 普陀区 sale2017 4450

14 store2 黄浦区 sale2017 4100

15 store3 徐汇区 sale2017 4000

16 store4 浦东新区 sale2017 3200

和melt()函数不同,gather()函数需要指定关键字段key,以及关键字段对应的值value,但是gather()函数更加好理解。

二、长转宽——dcast()和spread()

还是用上面的data1数据集,先来看看dcast()函数

[python] view plain copy

#长转宽——dcast

dcast(

data=mydata1,

name+address~Year

#左侧是要保留的字段,右侧是要分割的分类变量,列数等于表达式

#右侧分类变量的类别个数

)

[python] view plain copy

>#长转宽——dcast

>dcast(

+ data=mydata1,

+ name+address~Year

+ #左侧是要保留的字段,右侧是要分割的分类变量,列数等于表达式

+ #右侧分类变量的类别个数

+ )

Using sale as value column: use value.var to override.

name address sale2014 sale2015 sale2016 sale2017

1 store1 普陀区 3000 3020 5150 4450

2 store2 黄浦区 2500 2800 3600 4100

3 store3 徐汇区 2100 3900 2700 4000

4 store4 浦东新区 1000 2000 2500 3200

dcast()函数的使用规则需要琢磨下才能理解,大家好好看看注释部分,再来看看spread()

[python] view plain copy

#长转宽——spread

tidyr::spread(

data=mydata1,

key=Year,

value=sale

)

[python] view plain copy

>#长转宽——spread

>tidyr::spread(

+ data=mydata1,

+ key=Year,

+ value=sale

+ )

name address sale2014 sale2015 sale2016 sale2017

1 store1 普陀区 3000 3020 5150 4450

2 store2 黄浦区 2500 2800 3600 4100

3 store3 徐汇区 2100 3900 2700 4000

4 store4 浦东新区 1000 2000 2500 3200

直接调用tidyr::spread,需要指定关键字段key和对应的值value。

但是从理解上来看,我个人更喜欢tidyr包的函数,使用很清晰,大家可以根据实际情况自行选择,好啦,今天的分享结束,下次再见!

要保留此字段转换后的分类,字段名称转换后的度量值,名称输入的结果和长转快,需要指定的键盘开关键及关键字段对应的数值,可以更好的理解左侧是要保留的,字段,右侧是要分割的,分类变量列数等于表达式,这样就可以将R语言转列为行。

R语言数据结构主要有以下四种:

四种数据结构,重点掌握 向量 数据框

判断数据结构的函数: class()

向量的详细讲解在上一篇文章,以下主要讲数据框,矩阵,列表:

以下大部分操作使用的数据框为df

几个重要的函数:查看数据框的行数和列数,行名和列名;以及单独查行的数量,列的数量

数据框取子集有几种方法 : $ 符号,坐标,名字,逻辑值

在 [,] 里,行在前面(左边),列在后面(右边),行与列用逗号 , 隔开: [行,列]

中括号里的逗号,表示维度的分割

数据框按照逻辑值取子集,TRUE对应的行/列留下,FALSE对应的行/列去掉。

修改第二列的列名,就是修改列名这个向量的第二个元素

https://blog.csdn.net/weixin_39718006/article/details/110516670

后续的笔记会有详细介绍

矩阵不能用 $ 符号取子集

t():转置函数,行与列的互换

as.data.frame():转换,把矩阵变为数据框 ,用as.matrix()函数也能把数据框变为矩阵

聚类,相似的行,相似的列会聚在一起。热图自动聚类,行和列的相对位置发生了变化,只是列与列,行与行之间的变化规律。

![热图自动聚类]]( https://upload-images.jianshu.io/upload_images/17511166-f6e2432a04cffbbe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )

热图默认聚类,修改参数,不让聚类,热图与表达矩阵对应。

默认的设置不符合自己的预期,可以子啊作者允许的范围内定义。

查看函数帮助文档,参考修改,达到自己的要求。

列表没有列名和行名,只有元素的名字。列表可以由数据框,矩阵,向量,单独的一个数字都可以组成。

列表没有行和列的概念,只有元素,取子集的两种方式: [[]] , $ ,

$ 有两个作用:数据框取子集和列表取子集。在矩阵和向量里不能用 $ 。

用 class() 函数更能具体说明问题, 判断数据结构和数据类型

以上内容是听 生信技能树 小洁老师的 R语言线上课 ,根据自己的理解记录下来,小洁老师授课非常细心,对不同水平的同学都照顾到,并且补充很多技巧以及注意事项。

认识R语言的四种数据结构,小洁老师强调重点掌握向量和数据框,在实战中遇到很多数据结构都是数据框,表达矩阵可以转化为数据框,数据框的一列可以看做是一个向量。小洁老师把实战中会需要的操作融入到练习题,在实战中能联想起小洁老师讲过的知识点。