当前位置:K88软件开发文章中心编程语言R语言R语言01 → 文章内容

R语言 数据重塑

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 15:46:01

由 xiaoxiaogang 创建,youj 最后一次修改 2016-12-12 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] 17melt()拆分数据和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 valu

[1] [2]  下一页


R语言 数据重塑