📜  R 编程中的数据重塑

📅  最后修改于: 2022-05-13 01:55:40.699000             🧑  作者: Mango

R 编程中的数据重塑

通常,在R 编程语言中,数据处理是通过将数据作为数据帧的输入来完成的,其中数据被组织成行和列。主要使用数据框,因为提取数据要简单得多,因此也更容易。但有时我们需要从我们收到的数据帧中重塑数据帧的格式。因此,在 R 中,我们可以使用各种函数拆分、合并和重塑数据框。

数据框中的数据整形的各种形式是:

  • 矩阵的转置
  • 连接行和列
  • 合并数据框
  • 熔铸

为什么 R – 数据重塑很重要?

在进行分析或使用分析函数时,由于实验或研究而获得的结果数据通常是不同的。获得的数据通常具有一列或多列,它们对应或标识一行,然后是表示测量值的许多列。我们可以说,这些标识行的列可以是数据库中列的组合键。

矩阵的转置

我们可以借助 t()函数轻松计算 R 语言中矩阵的转置。 t()函数将矩阵或数据帧作为输入,并将该矩阵或数据帧的转置作为输出。

句法:

t(Matrix/ Data frame)

例子:

R
# R program to find the transpose of a matrix
 
first <- matrix(c(1:12), nrow=4, byrow=TRUE)
print("Original Matrix")
first
 
first <- t(first)
print("Transpose of the Matrix")
first


R
# Cbind and Rbind function in R
name <- c("Shaoni", "esha", "soumitra", "soumi")
age <- c(24, 53, 62, 29)
address <- c("puducherry", "kolkata", "delhi", "bangalore")
 
# Cbind function
info <- cbind(name, age, address)
print("Combining vectors into data frame using cbind ")
print(info)
 
# creating new data frame
newd <- data.frame(name=c("sounak", "bhabani"),
                   age=c("28", "87"),
                   address=c("bangalore", "kolkata"))
 
# Rbind function
new.info <- rbind(info, newd)
print("Combining data frames using rbind ")
print(new.info)


R
# Merging two data frames in R
d1 <- data.frame(name=c("shaoni", "soumi", "arjun"),
                 ID=c("111", "112", "113"))
 
d2 <- data.frame(name=c("sounak", "esha"),
                 ID=c("114", "115"))
 
total <- merge(d1, d2, all=TRUE)
print(total)


R
# melt and cast
library(MASS)
library(reshape)
a <- data.frame(id=c("1", "1", "2", "2"),
                points=c("1", "2", "1", "2"),
                x1=c("5", "3", "6", "2"),
                x2=c("6", "5", "1", "4"))
 
print("Melting")
m <- melt(a, id=c("id", "point"))
print(m)
 
print("Casting")
idmn <- dcast(a, id~variable, mean)
print(idmn)


输出:

[1] "Original Matrix"
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12
[1] "Transpose of the Matrix"
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
 

连接数据框中的行和列

在 R 中,我们可以使用函数连接两个向量或合并两个数据帧。基本上有两个函数可以执行这些任务:

绑定():

我们可以使用cbind()函数按列组合向量、矩阵或数据帧。

rbind():

我们可以使用rbind()函数按行组合向量、矩阵或数据帧。

例子:

R

# Cbind and Rbind function in R
name <- c("Shaoni", "esha", "soumitra", "soumi")
age <- c(24, 53, 62, 29)
address <- c("puducherry", "kolkata", "delhi", "bangalore")
 
# Cbind function
info <- cbind(name, age, address)
print("Combining vectors into data frame using cbind ")
print(info)
 
# creating new data frame
newd <- data.frame(name=c("sounak", "bhabani"),
                   age=c("28", "87"),
                   address=c("bangalore", "kolkata"))
 
# Rbind function
new.info <- rbind(info, newd)
print("Combining data frames using rbind ")
print(new.info)

输出:

[1] "Combining vectors into data frame using cbind "
     name       age  address     
[1,] "Shaoni"   "24" "puducherry"
[2,] "esha"     "53" "kolkata"   
[3,] "soumitra" "62" "delhi"     
[4,] "soumi"    "29" "bangalore" 
[1] "Combining data frames using rbind "
      name age    address
1   Shaoni  24 puducherry
2     esha  53    kolkata
3 soumitra  62      delhi
4    soumi  29  bangalore
5   sounak  28  bangalore
6  bhabani  87    kolkata

合并两个数据框

在 R 中,我们可以使用merge()函数合并两个数据帧,前提是两个数据帧应该具有相同的列名。我们可以基于一个键值合并两个数据帧。

例子:

R

# Merging two data frames in R
d1 <- data.frame(name=c("shaoni", "soumi", "arjun"),
                 ID=c("111", "112", "113"))
 
d2 <- data.frame(name=c("sounak", "esha"),
                 ID=c("114", "115"))
 
total <- merge(d1, d2, all=TRUE)
print(total)

输出:

name  ID
1  arjun 113
2 shaoni 111
3  soumi 112
4   esha 115
5 sounak 114

熔铸

数据重塑涉及许多步骤,以获得所需或所需的格式。一种流行的方法是融合数据,将每一行转换为唯一的 id 变量组合,然后进行转换。用于此过程的两个函数:

熔化():

它用于将数据帧转换为熔融数据帧。

广播():

它用于将熔化的数据帧聚合成一个新的形式。

例子:

R

# melt and cast
library(MASS)
library(reshape)
a <- data.frame(id=c("1", "1", "2", "2"),
                points=c("1", "2", "1", "2"),
                x1=c("5", "3", "6", "2"),
                x2=c("6", "5", "1", "4"))
 
print("Melting")
m <- melt(a, id=c("id", "point"))
print(m)
 
print("Casting")
idmn <- dcast(a, id~variable, mean)
print(idmn)

输出:

Melting
id   points   variable   value
1     1         x1          5
1     2         x1          3
2     1         x1          6
2     2         x1          2
1     1         x2          6
1     2         x2          5
2     1         x2          1
2     2         x2          4
Casting
id    x1     x2
1     4      5.5
2     4      2.5