R语言 数据重塑

Posted 方舟编译器开源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言 数据重塑相关的知识,希望对你有一定的参考价值。

R语言中的数据重塑是关于改变数据被组织成行和列的方式。大多数时间R语言中的数据处理是通过将输入数据作为数据帧来完成的。很容易从数据帧的行和列中提取数据,但是在某些情况下,我们需要的数据帧格式与我们接收数据帧的格式不同。R语言具有许多功能,在数据帧中拆分,合并和将行更改为列,反之亦然。

于数据帧中加入列和行

我们可以使用cbind()函数连接多个向量来创建数据帧。此外,我们可以使用rbind()函数合并两个数据帧。

# Create vector objects.city <- c("Tampa","Seattle","Hartford","Denver")state <- c("FL","WA","CT","CO")zipcode <- c(33602,98104,06161,80294)
# Combine above three vectors into one data frame.addresses <- cbind(city,state,zipcode)
# Print a header.cat("# # # # The First data frame")
# Print the data frame.print(addresses)
# Create another data frame with similar columnsnew.address <- data.frame( city = c("Lowry","Charlotte"), state = c("CO","FL"), zipcode = c("80230","33949"), stringsAsFactors = FALSE)
# Print a header.cat("# # # The Second data frame")
# Print the data frame.print(new.address)
# Combine rows form both the data frames.all.addresses <- rbind(addresses,new.address)
# Print a header.cat("# # # The combined data frame")
# Print the result.print(all.addresses)



当我们执行上面的代码,它产生以下结果 -

# # # # The First data frame city state zipcode[1,] "Tampa" "FL" "33602"[2,] "Seattle" "WA" "98104"[3,] "Hartford" "CT" "6161"[4,] "Denver" "CO" "80294"
# # # The Second data frame city state zipcode1 Lowry CO 802302 Charlotte FL 33949
# # # The combined data frame city state zipcode1 Tampa FL 336022 Seattle WA 981043 Hartford CT 61614 Denver CO 802945 Lowry CO 802306 Charlotte FL 33949



合并数据帧

我们可以使用merge()函数合并两个数据帧。数据帧必须具有相同的列名称,在其上进行合并。

在下面的例子中,我们考虑图书馆名称“MASS”中有关Pima Indian Women的糖尿病的数据集。我们基于血压(“bp”)和体重指数(“bmi”)的值合并两个数据集。在选择这两列用于合并时,其中这两个变量的值在两个数据集中匹配的记录被组合在一起以形成单个数据帧。

library(MASS)merged.Pima <- merge(x = Pima.te, y = Pima.tr, by.x = c("bp", "bmi"), by.y = c("bp", "bmi"))print(merged.Pima)nrow(merged.Pima)



当我们执行上面的代码,它产生以下结果 -

 bp bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y1 60 33.8 1 117 23 0.466 27 No 2 125 20 0.0882 64 29.7 2 75 24 0.370 33 No 2 100 23 0.3683 64 31.2 5 189 33 0.583 29 Yes 3 158 13 0.2954 64 33.2 4 117 27 0.230 24 No 1 96 27 0.2895 66 38.1 3 115 39 0.150 28 No 1 114 36 0.2896 68 38.5 2 100 25 0.324 26 No 7 129 49 0.4397 70 27.4 1 116 28 0.204 21 No 0 124 20 0.2548 70 33.1 4 91 32 0.446 22 No 9 123 44 0.3749 70 35.4 9 124 33 0.282 34 No 6 134 23 0.54210 72 25.6 1 157 21 0.123 24 No 4 99 17 0.29411 72 37.7 5 95 33 0.370 27 No 6 103 32 0.32412 74 25.9 9 134 33 0.460 81 No 8 126 38 0.16213 74 25.9 1 95 21 0.673 36 No 8 126 38 0.16214 78 27.6 5 88 30 0.258 37 No 6 125 31 0.56515 78 27.6 10 122 31 0.512 45 No 6 125 31 0.56516 78 39.4 2 112 50 0.175 24 No 4 112 40 0.23617 88 34.5 1 117 24 0.403 40 Yes 4 127 11 0.598 age.y type.y1 31 No2 21 No3 24 No4 21 No5 21 No6 43 Yes7 36 Yes8 40 No9 29 Yes10 28 No11 55 No12 39 No13 39 No14 49 Yes15 49 Yes16 38 No17 28 No[1] 17



melt()拆分数据和cast()数据重构

R语言编程的一个最有趣的方面是关于在多个步骤中改变数据的形状以获得期望的形状。用于执行此操作的函数称为melt()和cast()。

我们考虑称为船舶的数据集称为“MASS”。

library(MASS)print(ships)



当我们执行上面的代码,它产生以下结果 -

 type year period service incidents1 A 60 60 127 02 A 60 75 63 03 A 65 60 1095 34 A 65 75 1095 45 A 70 60 1512 6..........................8 A 75 75 2244 119 B 60 60 44882 3910 B 60 75 17176 2911 B 65 60 28609 58........................17 C 60 60 1179 118 C 60 75 552 119 C 65 60 781 0........................



melt()拆分数据

现在我们拆分数据进行重组,将除类型和年份以外的所有列转换为多行展示。


molten.ships <- melt(ships, id = c("type","year"))print(molten.ships)



当我们执行上面的代码,它产生以下结果 -

 type year variable value1 A 60 period 602 A 60 period 753 A 65 period 604 A 65 period 75........................9 B 60 period 6010 B 60 period 7511 B 65 period 6012 B 65 period 7513 B 70 period 60......................41 A 60 service 12742 A 60 service 6343 A 65 service 1095......................70 D 70 service 120871 D 75 service 072 D 75 service 205173 E 60 service 4574 E 60 service 075 E 65 service 789......................101 C 70 incidents 6102 C 70 incidents 2103 C 75 incidents 0104 C 75 incidents 1105 D 60 incidents 0106 D 60 incidents 0......................



cast()重构数据

我们可以将被拆分的数据转换为一种新形式,使用cast()函数创建每年每种类型的船的总和。

recasted.ship <- cast(molten.ships, type+year~variable,sum)print(recasted.ship)



当我们执行上面的代码,它产生以下结果 -

 type year period service incidents1 A 60 135 190 02 A 65 135 2190 73 A 70 135 4865 244 A 75 135 2244 115 B 60 135 62058 686 B 65 135 48979 1117 B 70 135 20163 568 B 75 135 7117 189 C 60 135 1731 210 C 65 135 1457 111 C 70 135 2731 812 C 75 135 274 113 D 60 135 356 014 D 65 135 480 015 D 70 135 1557 1316 D 75 135 2051 417 E 60 135 45 018 E 65 135 1226 1419 E 70 135 3318 1720 E 75 135 542 1



以上是关于R语言 数据重塑的主要内容,如果未能解决你的问题,请参考以下文章

R语言 整合数据

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

如何重塑 R 中的相关输出(非透视结果数据)?

R语言配对图可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接和左连接(left join)配对图可视化(根据分类变量的值为散点图上的数据点添加颜色)

使用 R 重塑数据