如何在 R 中堆叠 DataFrame 列?
数据框是由行和列组成的管状结构。数据框列可以堆叠在一起,以根据其中包含的值划分列。
方法一:使用栈法
cbind() 操作用于将数据框的列堆叠在一起。最初,数据帧的前两列使用 df[1:2] 组合在一起。接下来是应用于最后两列的 stack() 方法。
base R 中的 stack 方法用于将数据框或列表中以单独列的形式提供的数据转换为单个列。 stack 方法以具有两列的数据框的形式生成结果:
- 值:通过连接 x 中的选定向量产生的结果。
- ind:一个因子,表示观察来自 x 中的哪个向量。
句法:
stack(x)
论据:
- x - 要堆叠的列表或数据框
原始数据框如下所示:
col1 semester quiz_sst quiz_maths
1 Yash A 1 2
2 Yash B 3 4
3 Mallika A 4 6
4 Mallika B 8 2
5 Muskan A 9 7
6 Muskan B 1 3
R
# creating a data frame
data <- data.frame(col1=c('Yash', 'Yash', 'Mallika',
'Mallika', 'Muskan', 'Muskan'),
semester=c(rep(LETTERS[1:2],3)),
quiz_sst=c(1, 3, 4, 8, 9, 1),
quiz_maths=c(2, 4, 6, 2, 7, 3))
# binding the first two columns as it is
# and stacking the third and fourth columns
data_mod <- cbind(data[1:2], stack(data[3:4]))
print(data_mod)
R
# importing the required library
library("reshape2")
# creating a data frame
data <- data.frame(col1=c('Yash', 'Yash', 'Mallika',
'Mallika', 'Muskan', 'Muskan'),
semester=c(rep(LETTERS[1:2],3)),
quiz_sst=c(1, 3, 4, 8, 9, 1),
quiz_maths=c(2, 4, 6, 2, 7, 3))
# binding the first two columns as it is
# and stacking the third and fourth columns
data_mod <- reshape2::melt(data, id.var = c('col1', 'semester'),
variable.name = 'quiz_marks')
print(data_mod)
输出
col1 semester values ind
1 Yash A 1 quiz_sst
2 Yash B 3 quiz_sst
3 Mallika A 4 quiz_sst
4 Mallika B 8 quiz_sst
5 Muskan A 9 quiz_sst
6 Muskan B 1 quiz_sst
7 Yash A 2 quiz_maths
8 Yash B 4 quiz_maths
9 Mallika A 6 quiz_maths
10 Mallika B 2 quiz_maths
11 Muskan A 7 quiz_maths
12 Muskan B 3 quiz_maths
方法二:使用熔体法
R 中的 reshape2 包可用于更改所提供数据的结构,并可使用以下命令安装并导入工作空间:
install.packages("reshape2")
library(reshape2)
该包中的 melt 方法可用于将数据框列堆叠在一起。它用于重塑和拉长数据框。该 melt() 方法具有以下语法:
melt(data, id.var , variable.name)
论据:
- 数据 - 堆叠列的数据框
- id.ar – 用作主键的列
- variable.name – 要附加的新列名
原始数据框如下所示:
col1 semester quiz_sst quiz_maths
1 Yash A 1 2
2 Yash B 3 4
3 Mallika A 4 6
4 Mallika B 8 2
5 Muskan A 9 7
6 Muskan B 1 3
R
# importing the required library
library("reshape2")
# creating a data frame
data <- data.frame(col1=c('Yash', 'Yash', 'Mallika',
'Mallika', 'Muskan', 'Muskan'),
semester=c(rep(LETTERS[1:2],3)),
quiz_sst=c(1, 3, 4, 8, 9, 1),
quiz_maths=c(2, 4, 6, 2, 7, 3))
# binding the first two columns as it is
# and stacking the third and fourth columns
data_mod <- reshape2::melt(data, id.var = c('col1', 'semester'),
variable.name = 'quiz_marks')
print(data_mod)
输出
[1] "Modified DataFrame"
col1 semester quiz_marks value
1 Yash A quiz_sst 1
2 Yash B quiz_sst 3
3 Mallika A quiz_sst 4
4 Mallika B quiz_sst 8
5 Muskan A quiz_sst 9
6 Muskan B quiz_sst 1
7 Yash A quiz_maths 2
8 Yash B quiz_maths 4
9 Mallika A quiz_maths 6
10 Mallika B quiz_maths 2
11 Muskan A quiz_maths 7
12 Muskan B quiz_maths 3