R 中的数据重整(Data Reshaping)类似于按照您的需求重新排列行与列。大多数情况下,数据会以 R 中的数据框(data frame) 形式进行处理,使用诸如 "rbind()"、"cbind()" 等函数。
在此过程中,您会将数据重新塑形或重组为行和列。重整就是以特定方式重新组织数据,以便后续处理。
创建您的数据
我们来创建一个随机数生成器,并构造列以便在数据框中连接。同时插入 id 以备后用。"set.seed(123)" 用于生成随机数,保证任何人在任何机器上使用时都能重现相同的样本。创建了三个变量 colm1、colm2、colm3。借助 "sample()",从 1 到 15 生成取值,并允许重复。同时使用数据框以表格形式存储数据,并加入唯一编号的 id。
set.seed(123)
N <- 15
colm1 <- sample(1:15, N, replace=TRUE)
colm2 <- sample(1:15, N, replace=TRUE)
colm3 <- sample(1:15, N, replace=TRUE)
df_Temp <- data.frame(colm1, colm2,colm3)
df_Temp$id<-seq(nrow(df_Temp))
df_Temp技术支持
上述代码得到如下输出,其中有三列,分别命名为 "colm1"、"colm2"、"colm3",并包含从 1 到 15 的 id。各列的取值来自 1 到 15,部分数字会重复,部分数字可能未出现。
colm1 colm2 colm3 id
15 11 14 1
15 5 3 2
3 3 4 3
14 11 14 4
3 9 1 5
10 12 11 6
2 9 7 7
6 9 5 8
11 13 12 9
5 3 15 10
4 8 10 11
14 10 13 12
6 7 7 13
9 10 9 14
10 9 9 15 技术支持
cbind 函数
用法:按列合并向量、矩阵和数据框。
参数:cbind(v1,v2):v1、v2 可以是向量、矩阵或数据框
让我们看一个绑定的示例。
可以通过 "df_Temp[,4]" 选择 id,而 "df_Temp[,2]" 选择 df_Temp 的 "colm2",如下所示,这两者作为 "cbind()" 的参数,并存储在变量 "cbindexample" 中。之后可借助 "colnames()" 更改列名,它接收变量并将向量输入 c 指定为新值,即 "newid"、"new_colm2"。
cbindexample<-cbind(df_Temp[,4],df_Temp[,2])
colnames(cbindexample)<- c('newid','new_colm2')
cbindexample技术支持
上述代码产生如下输出,您可以用 "cbind" 函数将 id 与第 2 列两列绑定,生成一个新的数据框。同时,将列名改为 "new_colm2",而 "id" 改为 "newid"。
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9技术支持
rbind 函数:
用法:rbind 用于按列名匹配、按行合并向量、矩阵或数据框。
参数:rbind(v1,v2):v1、v2 可以是向量、矩阵或数据框。
创建一个名为 "new_vector" 的新向量,并使用 "rbind" 将其与由两列构成的 "cbindexample" 合并,二者拼接后存入 "rbindexample"。
new_vector<- c(16,15)
rbindexample<- rbind(cbindexample,new_vector)
rbindexample技术支持
上述代码得到如下输出,其中在 "newid" 和 "new_colm2" 中分别新增一行,取值为 16 和 15。
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
16 15技术支持
Melt 函数:
用法:Melt 函数用于将对象转换为“熔化”状态,即将多列数据转换为单列数据。
参数:melt(data,…,na.rm=FALSE/TRUE, value.name=”value” ),
data:要进行 melt 的输入数据。
...:传入或传出的其他输入。
na.rm:用于将显式缺失值转换为隐式缺失。
value.name:用于存放值的变量名。
下面的代码展示了如何使用 id 变量将数据“熔化”为包含列名与取值的一列:
使用 "library()" 导入名为 "reshape2" 的库,并使用 melt 将 dfTemp 中的 colm1、colm2、colm3 按照 "id" 变量合并到名为 "variable" 的单一位置。
library(reshape2)
molted=melt(df_Temp,id.vars=c("id"))
molted技术支持
id variable value
1 colm1 15
2 colm1 15
3 colm1 3
4 colm1 14
5 colm1 3
6 colm1 10
7 colm1 2
8 colm1 6
9 colm1 11
10 colm1 5
11 colm1 4
12 colm1 14
13 colm1 6
14 colm1 9
15 colm1 10
1 colm2 11
2 colm2 5
3 colm2 3
4 colm2 11
5 colm2 9
6 colm2 12
7 colm2 9
8 colm2 9
9 colm2 13
10 colm2 3
11 colm2 8
12 colm2 10
13 colm2 7
14 colm2 10
15 colm2 9
1 colm3 14
2 colm3 3
3 colm3 4
4 colm3 14
5 colm3 1
6 colm3 11
7 colm3 7
8 colm3 5
9 colm3 12
10 colm3 15
11 colm3 10
12 colm3 13
13 colm3 7
14 colm3 9
15 colm3 9技术支持
上述输出显示:当您根据 id 变量对 colm1、colm2、colm3 进行熔化时,它们被合并到名为 "variable" 的一列中,而各列的取值存放在 "value" 中。
Dcast 函数:
用法:当您有一个熔化后的数据集时,可以用该函数将其还原为原始格式。
参数:dcast(data,id_variable~value),
data:需要还原为原始形式的熔化数据。
id_variable:用于将其他列熔化为一列时所用的一个或多个列。
~:在该符号之后,放置熔化数据集中表示新列的变量。
如下代码所示,使用 "library()" 导入 "reshape2","dcast()" 的第一个参数为执行过 "molt()" 的数据,以及带有 id 的 "~" 符号以形成新的熔化列。
library(reshape2)
dcast(molted,id~variable)技术支持
id colm1 colm2 colm3
1 15 11 14
2 15 5 3
3 3 3 4
4 14 11 14
5 3 9 1
6 10 12 11
7 2 9 7
8 6 9 5
9 11 13 12
10 5 3 15
11 4 8 10
12 14 10 13
13 6 7 7
14 9 10 9
15 10 9 9技术支持
您可以看到,经过 "molt()" 之后的数据又被还原回原始数据集。共有三列及其各自的取值,id 单独在一列。
转置(Transpose)函数:
用法:用于将行变为列、列变为行。
参数:t(data),data 为需要传入并进行转置的数据框。
我们使用转置函数将行变为列,列变为行。只需使用 "t(df_Temp)",如下所示。
trans <- t(df_Temp)
trans技术支持
上述代码得到如下输出:
colm1 15 15 3 14 3 10 2 6 11 5 4 14 6 9 10
colm2 11 5 3 11 9 12 9 9 13 3 8 10 7 10 9
colm3 14 3 4 14 1 11 7 5 12 15 10 13 7 9 9
id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15技术支持
您可以看到,原本为 15 行 4 列的数据框,转置后变为 15 列 3 行。
恭喜
恭喜您读完本教程!
在本教程中,您学习了 R 的不同函数,如 "rbind()"、"cbind()",以及 "Melt()"、"Dcast()",最后还有转置函数。
如果您想进一步学习 R,请参加 DataCamp 的 Introduction to R 课程,并查看我们的 R Packages: A Beginner's Tutorial。
参考资料:
Melt 函数
R 中的数据重整(Data Reshaping)类似于按照您的需求重新排列行与列。大多数情况下,数据会以 R 中的数据框(data frame) 形式进行处理,使用诸如 "rbind()"、"cbind()" 等函数。
在此过程中,您会将数据重新塑形或重组为行和列。重整就是以特定方式重新组织数据,以便后续处理。
创建您的数据
我们来创建一个随机数生成器,并构造列以便在数据框中连接。同时插入 id 以备后用。"set.seed(123)" 用于生成随机数,保证任何人在任何机器上使用时都能重现相同的样本。创建了三个变量 colm1、colm2、colm3。借助 "sample()",从 1 到 15 生成取值,并允许重复。同时使用数据框以表格形式存储数据,并加入唯一编号的 id。
上述代码得到如下输出,其中有三列,分别命名为 "colm1"、"colm2"、"colm3",并包含从 1 到 15 的 id。各列的取值来自 1 到 15,部分数字会重复,部分数字可能未出现。
cbind 函数
用法:按列合并向量、矩阵和数据框。
参数:cbind(v1,v2):v1、v2 可以是向量、矩阵或数据框
让我们看一个绑定的示例。
可以通过 "df_Temp[,4]" 选择 id,而 "df_Temp[,2]" 选择 df_Temp 的 "colm2",如下所示,这两者作为 "cbind()" 的参数,并存储在变量 "cbindexample" 中。之后可借助 "colnames()" 更改列名,它接收变量并将向量输入 c 指定为新值,即 "newid"、"new_colm2"。
上述代码产生如下输出,您可以用 "cbind" 函数将 id 与第 2 列两列绑定,生成一个新的数据框。同时,将列名改为 "new_colm2",而 "id" 改为 "newid"。
rbind 函数:
用法:rbind 用于按列名匹配、按行合并向量、矩阵或数据框。
参数:rbind(v1,v2):v1、v2 可以是向量、矩阵或数据框。
创建一个名为 "new_vector" 的新向量,并使用 "rbind" 将其与由两列构成的 "cbindexample" 合并,二者拼接后存入 "rbindexample"。
上述代码得到如下输出,其中在 "newid" 和 "new_colm2" 中分别新增一行,取值为 16 和 15。
Melt 函数:
用法:Melt 函数用于将对象转换为“熔化”状态,即将多列数据转换为单列数据。
参数:melt(data,…,na.rm=FALSE/TRUE, value.name=”value” ),
data:要进行 melt 的输入数据。
...:传入或传出的其他输入。
na.rm:用于将显式缺失值转换为隐式缺失。
value.name:用于存放值的变量名。
下面的代码展示了如何使用 id 变量将数据“熔化”为包含列名与取值的一列:
使用 "library()" 导入名为 "reshape2" 的库,并使用 melt 将 dfTemp 中的 colm1、colm2、colm3 按照 "id" 变量合并到名为 "variable" 的单一位置。
上述输出显示:当您根据 id 变量对 colm1、colm2、colm3 进行熔化时,它们被合并到名为 "variable" 的一列中,而各列的取值存放在 "value" 中。
Dcast 函数:
用法:当您有一个熔化后的数据集时,可以用该函数将其还原为原始格式。
参数:dcast(data,id_variable~value),
data:需要还原为原始形式的熔化数据。
id_variable:用于将其他列熔化为一列时所用的一个或多个列。
~:在该符号之后,放置熔化数据集中表示新列的变量。
如下代码所示,使用 "library()" 导入 "reshape2","dcast()" 的第一个参数为执行过 "molt()" 的数据,以及带有 id 的 "~" 符号以形成新的熔化列。
您可以看到,经过 "molt()" 之后的数据又被还原回原始数据集。共有三列及其各自的取值,id 单独在一列。
转置(Transpose)函数:
用法:用于将行变为列、列变为行。
参数:t(data),data 为需要传入并进行转置的数据框。
我们使用转置函数将行变为列,列变为行。只需使用 "t(df_Temp)",如下所示。
上述代码得到如下输出:
您可以看到,原本为 15 行 4 列的数据框,转置后变为 15 列 3 行。
恭喜
恭喜您读完本教程!
在本教程中,您学习了 R 的不同函数,如 "rbind()"、"cbind()",以及 "Melt()"、"Dcast()",最后还有转置函数。
如果您想进一步学习 R,请参加 DataCamp 的 Introduction to R 课程,并查看我们的 R Packages: A Beginner's Tutorial。
参考资料:
Melt 函数