R语言学习笔记

《R语言实战》学习笔记---Chapter5(10) 高级数据管

2023-08-26  本文已影响0人  RSP小白之路

数据重构简单实践

reshape2包

reshape2 包是一套重构和整合数据集的绝妙的万能工具,这里只按照本书做简单用法学习。它的深入功能要使用一个包,先要安装:

if(!require(reshape2)) install.packages("reshape2")

数据融合

数据融合(melt)使每一行都是唯一的标识符-变量组合。
使用书中的例子进行说明吧:

rm(list = ls())
ID <- c(1,1,2,2)
Time <- c(1,2,1,2)
X1 <- c(5,3,6,2)
X2 <- c(6,5,1,4)
mydt <- data.frame(ID, Time,X1,X2 )
> print(mydt)
  ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4

这个数据框中,标识变量为ID和Time,观测值数据变量为X1和X2,现在要做的是,使标识变量为ID和Time能够唯一地确定一个观测值,X1和X2则作为一个新衍生的变量的观测值成为一列,它们的观测值为值变量作为一列。

> if(!require(reshape2)) install.packages("reshape2")
载入需要的程辑包:reshape2

载入程辑包:‘reshape2’

The following object is masked from ‘package:tidyr’:

    smiths

> melt(mydt, id.vars = c("ID" , "Time"))
  ID Time variable value
1  1    1       X1     5
2  1    2       X1     3
3  2    1       X1     6
4  2    2       X1     2
5  1    1       X2     6
6  1    2       X2     5
7  2    1       X2     1
8  2    2       X2     4

注意, 必须指定要唯一确定每个测量所需的变量(ID和Time),而表示测量变量名的变量(X1或X2) 将由程序为你自动创建。

数据重铸

融合后的数据, 现在就可以使用dcast() 函数将它重铸为任意形状了。数据重铸 (cast) 为你想要的任何形状。 在重铸过程中, 你可以使用任何函数对数据进行整合。

dcast() 函数读取已融合的数据, 并使用你提供的公式和一个(可选的) 用于整合数据的函数将其重塑。

调用格式为:

newdata <- dcast(md, formula, fun.aggregate)

其中的 md 为已融合的数据, formula 描述了想要的最后结果, 而
fun.aggregate 是(可选的) 数据整合函数。其接受的公式形如:

rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...

[图片上传失败...(image-91e2e-1691908043678)]书中有一个图片总结的很好,可是不知道为何最近简书无法上传图片。

那我只能把图片列举的每种结果都运行一次了,我们一一来试过:

mt <- melt(mydt, id.vars = c("ID" , "Time"))   
mt # 运行melt函数后融合数据集

  ID Time variable value
1  1    1       X1     5
2  1    2       X1     3
3  2    1       X1     6
4  2    2       X1     2
5  1    1       X2     6
6  1    2       X2     5
7  2    1       X2     1
8  2    2       X2     4

不执行整合

 ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
  ID variable 1 2
1  1       X1 5 3
2  1       X2 6 5
3  2       X1 6 2
4  2       X2 1 4

执行整合

  ID X1  X2
1  1  4 5.5
2  2  4 2.5
  Time  X1  X2
1    1 5.5 3.5
2    2 2.5 4.5
  ID   1 2
1  1 5.5 4
2  2 3.5 3

如你所见, 函数melt() 和dcast() 提供了令人惊叹的灵活性。

上一篇 下一篇

猜你喜欢

热点阅读