📜  R数据重塑

📅  最后修改于: 2021-01-08 09:46:35             🧑  作者: Mango

R中的数据重塑

在R中,数据重塑是关于更改将数据组织为行和列的方式。在R中,通过将输入作为数据帧来完成数据处理。从数据帧的行和列中提取数据要容易得多,但是当我们需要的数据帧的格式与接收数据的格式不同时,就会出现问题。 R提供了许多功能,可以将数据帧中的行合并,拆分和更改为列,反之亦然。

转置矩阵

R允许我们通过提供t()函数来计算矩阵或数据帧的转置。此t()函数将矩阵或数据帧作为输入,并返回输入矩阵或数据帧的转置。 t()函数的语法如下:

t(Matrix/data frame)

让我们看一个例子来了解如何使用此函数

a <- matrix(c(4:12),nrow=3,byrow=TRUE)
a
print("Matrix after transpose\n")
b <- t(a)
b

输出:

在数据框中连接行和列

R允许我们结合多个向量来创建数据帧。为此,R提供了cbind()函数。 R还提供了rbind()函数,该函数允许我们合并两个数据帧。在某些情况下,我们需要合并数据帧以访问依赖于这两个数据帧的信息。 cbind()函数和rbind()函数具有以下语法。

cbind(vector1, vector2,.......vectorN)
rbind(dataframe1, dataframe2,........dataframeN)

让我们看一个示例,以了解如何使用cbind()和rbind()函数。

#Creating vector objects
Name <- c("Shubham Rastogi","Nishka Jain","Gunjan Garg","Sumit Chaudhary")
Address <- c("Moradabad","Etah","Sambhal","Khurja")
Marks <- c(255,355,455,655)

#Combining vectors into one data frame
info <- cbind(Name,Address,Marks)

#Printing data frame
print(info)

# Creating another data frame with similar columns
new.stuinfo <- data.frame(
    Name = c("Deepmala","Arun"),
    Address = c("Khurja","Moradabad"),
    Marks = c("755","855"),
    stringsAsFactors=FALSE
)

#Printing a header.
cat("# # # The Second data frame\n") 

#Printing the data frame.
print(new.stuinfo)

# Combining rows form both the data frames.
all.info <- rbind(info,new.stuinfo)

# Printing a header.
cat("# # # The combined data frame\n") 

# Printing the result.
print(all.info)

输出:

合并数据框

R提供merge()函数来合并两个数据帧。在合并过程中,存在一个约束,即:数据框必须具有相同的列名。

让我们举一个例子,在该例子中,我们获取“ MASS”库中存在的有关Pima Indian Women中糖尿病的数据集。我们将根据血压值和体重指数合并两个数据集。选择这两列进行合并时,两个数据集中这两个变量的值匹配的记录将合并在一起以形成一个数据框。

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

输出:

熔铸

在R中,最重要和最有趣的主题是关于分多个步骤更改数据的形状以获得所需的形状。为此,R提供了melt()和cast()函数。为了了解其过程,请考虑存在于MASS库中的称为ships的数据集。

library(MASS)
print(ships)

输出:

融化数据

现在,我们将使用以上数据通过融合来组织它。熔化意味着将列转换为多行。我们将上述数据集的类型和年份以外的所有列转换为多行。

library(MASS)
library(reshape2)
molten_ships <- melt(ships, id = c("type","year"))
print(molten_ships)

输出:

熔解数据的铸造

融合数据后,我们可以将其转换为新的形式,以创建每年每种船舶的汇总。为此,R提供了cast()函数。

让我们开始进行合并数据的转换。

library(MASS)
library(reshape2)
#Melting the data
molten.ships <- melt(ships, id = c("type","year"))
print("Molted Data")
print(molten.ships)
#Casting of data
recasted.ship <- dcast(molten.ships, type+year~variable,sum)
print("Cast Data")
print(recasted.ship)

输出: