R语言 如何堆叠数据框架的列

R语言 如何堆叠数据框架的列

数据框架是一个由行和列组成的管状结构。数据框架的列可以被堆叠在一起,根据其中包含的值来划分列。

方法1:使用堆叠方法

cbind()操作被用来将数据框架的列堆叠在一起。最初,数据框的前两列使用df[1:2]组合在一起。随后,在最后两列上应用stack()方法。

在基础R中,堆栈方法被用来将数据框架或列表中以独立列的形式提供的数据转化为单列。堆栈方法产生的结果是一个有两列的数据框架形式。

  • values: 将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
# 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)

输出

     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

方法2:使用融化法

R中的reshape2包可以用来改变所提供的数据结构,可以用以下命令安装并导入到工作空间。

install.packages("reshape2")
library(reshape2)

这个软件包中的熔化方法可以用来将数据框架的列堆叠在一起。它被用来重塑和拉长数据框的形状。melt()方法的语法如下:

melt(data, id.var , variable.name)

参数:

  • data – 堆叠列的数据框架
  • 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
# 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程