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()函数按列组合向量、矩阵或数据帧。
Syntax: cbind(x1, x2, x3)
where x1, x2 and x3 can be vectors or matrices or data frames.
rbind():
我们可以使用rbind()函数按行组合向量、矩阵或数据帧。
Syntax: rbind(x1, x2, x3)
where x1, x2 and x3 can be vectors or matrices or data frames.
例子:
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()函数合并两个数据帧,前提是两个数据帧应该具有相同的列名。我们可以基于一个键值合并两个数据帧。
Syntax: merge(dfA, dfB, …)
例子:
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 变量组合,然后进行转换。用于此过程的两个函数:
熔化():
它用于将数据帧转换为熔融数据帧。
Syntax: melt(data, …, na.rm=FALSE, value.name=”value”)
where,
data: data to be melted
… : arguments
na.rm: converts explicit missings into implicit missings
value.name: storing values
广播():
它用于将熔化的数据帧聚合成一个新的形式。
Syntax: melt(data, formula, fun.aggregate)
where,
data: data to be melted
formula: formula that defines how to cast
fun.aggregate: used if there is a data aggregation
例子:
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