R语言 数据重塑
一般来说,在 R编程语言 中,数据处理是通过从数据框架中获取数据作为输入来完成的,数据被组织成行和列。数据框架大多被使用,因为提取数据要简单得多,因此更容易。但有时我们需要从我们收到的数据帧中重塑其格式。因此,在R语言中,我们可以使用各种函数分割、合并和重塑数据框。
在数据框中重塑数据的各种形式有
- 矩阵的转置
- 连接行和列
- 数据框架的合并
- 熔化和铸造
为什么R – 数据重塑很重要
在进行分析或使用分析函数时,由于实验或研究而获得的结果数据通常是不同的。所获得的数据通常有一个或多个列,对应或确定一个行,然后是代表测量值的若干列。我们可以说,这些识别行的列可以是数据库中某一列的复合键。
矩阵的转置
在R语言中,我们可以在t()函数的帮助下轻松计算矩阵的转置。t()函数将一个矩阵或数据框作为输入,并将该矩阵或数据框的转置作为其输出。
语法
t(Matrix/ Data frame)
例子
# 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
输出
[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()
我们可以使用 cbind() 函数按列合并向量、矩阵或数据框。
语法: cbind(x1, x2, x3)
其中x1, x2和x3可以是向量或矩阵或数据帧。
rbind()
我们可以使用 rbind() 函数将向量、矩阵或数据帧按行组合起来。
语法: rbind(x1, x2, x3)
其中x1, x2和x3可以是向量、矩阵或数据框。
例子
# 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() 函数来合并两个数据框架,前提是这两个数据框架应该有相同的列名。我们可以根据一个键值来合并两个数据框。
语法: merge(dfA, dfB, …)
例子
# 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-variable组合,然后再铸造它。在这个过程中使用了两个函数。
melt()
它用于将一个数据框转换为一个熔融数据框。
语法: melt(data, …, na.rm=FALSE, value.name=”value”)
其中
data: 要熔化的数据
… : 参数
na.rm: 将显式缺失转换为隐式缺失
value.name: 存储值
dcast()
它用于将熔化的数据框聚合成一个新的形式。
语法: melt(data, formula, fun.aggregation)
其中
data: 要熔化的数据
formula: 定义如何铸造的公式
fun.aggregation: 在有数据聚合的情况下使用
例子
# 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