如何在 r 中重塑宽格式和长格式之间的数据


R 中的数据框可以以宽格式或长格式显示。

根据您的目的,您可能希望数据框采用这些特定格式之一。

在这些格式之间重塑数据的最简单方法是使用 R 中Tidyr包中的以下两个函数:

  • ivot_longer() :将数据块从宽格式重塑为长格式。
  • ivot_wider() :将数据块从长格式重塑为宽格式。

以下示例展示了如何在实践中使用每个功能。

示例 1:将数据从宽整形为长整形

假设我们在 R 中有以下数据帧,目前为宽格式:

 #create data frame
df <- data. frame (player=c('A', 'B', 'C', 'D'),
                 year1=c(12, 15, 19, 19),
                 year2=c(22, 29, 18, 12))

#view data frame
df

  player year1 year2
1 to 12 22
2 B 15 29
3 C 19 18
4 D 19 12

我们可以使用pivot_longer()函数将此数据框旋转为长格式:

 library (tidyr)

#pivot the data frame into a long format
df %>% pivot_longer(cols=c(' year1 ', ' year2 '),
                    names_to=' year ',
                    values_to=' points ')

# A tibble: 8 x 3
  player year points
      
1 A year1 12
2 A year2 22
3 B year1 15
4 B year2 29
5 C year1 19
6 C year2 18
7 D year1 19
8 D year2 12

请注意, year1year2列名称现在用作名为“year”的新列中的值,并且这些原始列中的值放置在名为“points”的新列中。

最终结果是一个长数据帧。

注意:您可以在此处找到pivot_longer()函数的完整文档。

示例 2:将数据从长整形到宽整形

假设 R 中有以下数据帧,目前为长格式:

 #create data frame
df <- data. frame (player=rep(c('A', 'B'), each= 4 ),
                 year=rep(c(1, 1, 2, 2), times= 2 ),
                 stat=rep(c('points', 'assists'), times= 4 ),
                 amount=c(14, 6, 18, 7, 22, 9, 38, 4))

#view data frame
df

  player year stat amount
1 A 1 points 14
2 A 1 assists 6
3 A 2 points 18
4 A 2 assists 7
5 B 1 points 22
6 B 1 assists 9
7 B 2 points 38
8 B 2 assists 4

我们可以使用pivot_wider()函数将此数据框旋转为宽格式:

 library (tidyr)

#pivot the data frame into a wide format
df %>% pivot_wider(names_from = stat, values_from = amount)

# A tibble: 4 x 4
  player year points assists
         
1 A 1 14 6
2 A 2 18 7
3 B 1 22 9
4 B 2 38 4

请注意,统计列中的值现在用作列名称,金额列中的值用作这些新列中的单元格值。

最终结果是一大块数据。

注意:您可以在此处找到pivot_wider()函数的完整文档。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在R中按组计算唯一值
如何在R中计算非NA值
如何在 R 中创建相对频率表

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注