📜  在 R 中将 DataFrame 从长格式重塑为宽格式

📅  最后修改于: 2022-05-13 01:55:28.902000             🧑  作者: Mango

在 R 中将 DataFrame 从长格式重塑为宽格式

在本文中,我们将讨论如何在 R 编程语言中将数据帧从长格式重塑为宽格式。

数据帧中的数据由存储和检索发生的格式识别。数据帧中存在重复的键值对,可以使用以下方法重新排列。

方法 1:使用 reshape() 方法

R中的reshape方法用于对分组数据进行整形。它在基础 R 中可用。该方法基本上在不同格式之间重塑指定的数据帧,即“宽”格式在单独的列中进行重复测量,以及在单独的行中重复测量的“长”格式。

输出保留原始数据帧行号。缺失值在数据框中附加了 NA 值。

示例:从长到宽重塑数据框

R
# create first dataframe
data_frame1<-data.frame(col1=c(rep('Grp1',2),
                               rep('Grp2',2),
                               rep('Grp3',2)), 
                        col2=rep(1:3,2),
                        col3 = letters[1:6]
                        )
  
print("Original DataFrame")
print(data_frame1)
  
# reshaping the data
data_frame_mod <- reshape(data_frame1, idvar = "col1", 
                          timevar = "col2", direction = "wide")
  
print("Modified DataFrame")
print(data_frame_mod)


Python3
library("tidyr")
  
# create first dataframe
data_frame1 < -data.frame(col1=c(rep('Grp1', 2), rep('Grp2', 2), rep('Grp3', 2)),
                          col2=rep(1: 3, 2),
                          col3=letters[1:6]
                          )
print("Original DataFrame")
print(data_frame1)
  
# reshaping the data
data_frame_mod < -  spread(data_frame1,
                           key=col2,
                           value=col3)
print("Modified DataFrame")
print(data_frame_mod)


输出:

[1] "Original DataFrame" 
  col1 col2 col3 
1 Grp1    1    a 
2 Grp1    2    b 
3 Grp2    3    c 
4 Grp2    1    d 
5 Grp3    2    e 
6 Grp3    3    f 
[1] "Modified DataFrame" 
  col1 col3.1 col3.2 col3.3 
1 Grp1      a      b    
3 Grp2      d         c 
5 Grp3         e      f

方法二:使用 tidyr 包

可以使用以下语法将该包下载并安装到工作空间中:

install.packages("tidyr")

该包的 spread 方法可用于在 R 中将数据从长格式重新整形为宽格式。该方法用于为键列的每个唯一值附加一个新列。这些唯一的值集将构成新列的名称。

句法:

示例:从长到宽重塑数据框

蟒蛇3

library("tidyr")
  
# create first dataframe
data_frame1 < -data.frame(col1=c(rep('Grp1', 2), rep('Grp2', 2), rep('Grp3', 2)),
                          col2=rep(1: 3, 2),
                          col3=letters[1:6]
                          )
print("Original DataFrame")
print(data_frame1)
  
# reshaping the data
data_frame_mod < -  spread(data_frame1,
                           key=col2,
                           value=col3)
print("Modified DataFrame")
print(data_frame_mod)

输出:

col1    1    2    3 
1 Grp1    a    b  
2 Grp2    d     c 
3 Grp3     e    f