R语言高级数据管理之整合和重构

1,转置

使用t()函数进行转置

> cars <- mtcars[1:5,1:4]
> cars
                   mpg cyl disp  hp
Mazda RX4         21.0   6  160 110
Mazda RX4 Wag     21.0   6  160 110
Datsun 710        22.8   4  108  93
Hornet 4 Drive    21.4   6  258 110
Hornet Sportabout 18.7   8  360 175
> #使用t()函数进行转置
> t(cars)
     Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
mpg         21            21       22.8           21.4              18.7
cyl          6             6        4.0            6.0               8.0
disp       160           160      108.0          258.0             360.0
hp         110           110       93.0          110.0             175.0

2,整合数据

2.1聚合
使用aggregate()函数对数据进行聚合
aggregate()函数有点类似sql语言中的group by 可以按照要求把数据进行聚合。然后对聚合后的数据进行求和求平均等各种操作
其格式为
aggregate(x,by,fun)
x参数表示要处理的数据的数据框或数据框中的某一个向量
by表示要进行聚合的一个或多个变量,注意这些变量要写在一个列表中,例如by=list(cyl1,gear),还可以在列表中为各组声明自定义名称例如,by=list(group.cyl=cy1,group.gears=gear)
fun参数表示对分组后的数据进行操作的函数一般为求平均,求和等。
例子

> #例子
> #保留三位小数
> options(digits=3)
> attach(mtcars)
> aggdata <- aggregate(mtcars,by=list(cyl,gear),FUN = mean,na.rm=TRUE)
> aggdata
  Group.1 Group.2  mpg cyl disp  hp drat   wt qsec  vs   am gear carb
1       4       3 21.5   4  120  97 3.70 2.46 20.0 1.0 0.00    3 1.00
2       6       3 19.8   6  242 108 2.92 3.34 19.8 1.0 0.00    3 1.00
3       8       3 15.1   8  358 194 3.12 4.10 17.1 0.0 0.00    3 3.08
4       4       4 26.9   4  103  76 4.11 2.38 19.6 1.0 0.75    4 1.50
5       6       4 19.8   6  164 116 3.91 3.09 17.7 0.5 0.50    4 4.00
6       4       5 28.2   4  108 102 4.10 1.83 16.8 0.5 1.00    5 2.00
7       6       5 19.7   6  145 175 3.62 2.77 15.5 0.0 1.00    5 6.00
8       8       5 15.4   8  326 300 3.88 3.37 14.6 0.0 1.00    5 6.00

3,reshape包
reshape2包是用来重构和整合数据集的工具包
reshape2可以对数据进行融合(把所有的测量数据列融合为1列,只留下标识变量(能够唯一确定每个观测行,意思就是通过这些表示标量就能指向唯一的行))
对数据进行融合的函数为melt()其格式为
melt(data,id),data为要融合的数据,id为指定标识变量
例子

> library(reshape2)
> #融合
> #融合为把所有的测量数据列融合为1列
> #例子
> ID <- c(1,1,2,2)
> Time <- c(1,2,1,2)
> X1 <- c(5,3,6,2)
> X2 <- c(6,5,1,4)
> mydata <- data.frame(ID,Time,X1,X2)
> mydata
  ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
> mydata
  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表示标识变量(能够唯一确定每个测量所需的变零)
> #本例子中ID,Time表示标识变量,X1,X2表示测量变量
> md <- melt(mydata,id=c("ID","Time"))
> md
  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

重铸
重铸使用dcast()函数进行重铸,使用提供的工时和一个(可选的)用于整合数据的函数将其重塑
其格式为
newdata <- dcast(md,formula,fun.aggregate)
其中md为已融合的数据,formulu描述了想要的最后结果,
formulu参数的格式为rowvar1 + rowvar2+… ~ colvar1 + colvar2+…
这样最后得到的数据就是以rowvar1,rowvar2,…列为列及以colvar1 ,colvar…中的元素为列的数据。
例子

> #重铸
> #使用dcast()函数进行重铸,使用提供的公式和一个(可选的)用于整合数据的函数将其重塑。其格式为
> newdata <- dcast(md,ID+Time~variable)
> newdata
  ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
> newdata <- dcast(md,ID~variable,mean)
> newdata
  ID X1  X2
1  1  4 5.5
2  2  4 2.5
> newdata <- dcast(md,ID+variable~Time)
> newdata
  ID variable 1 2
1  1       X1 5 3
2  1       X2 6 5
3  2       X1 6 2
4  2       X2 1 4
发布了39 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42712867/article/details/96472963
今日推荐