如何在按R中的另一个变量分组时将行值转换为列

问题描述

我有一个包含两列重复值和几个唯一列的数据集。我想 group_by() 第一列具有重复值,同时将第二行转换为列。

例如

initial_df <- data.frame(
                      a = c("1999","1999","2000","2001","2001")
                      b = c("A","B","A","C","B"),c = c("1","2","3","4","5","6","7"),d = c("2","1","7")
            )

结果如下:

> initial_df
    a       b   c   d
1   1999    A   1   2
2   1999    B   2   1
3   2000    A   3   3
4   2000    B   4   4
5   2000    C   5   5
6   2001    A   6   6
7   2001    B   7   7

我想将其转换为如下所示的数据集:

>final_df
            A_c A_d B_c B_d C_c C_d
1   1999    1   2   2   1   Na  Na
2   2000    3   3   4   4   5   5
3   2001    6   6   7   7   Na  Na

我认为使用 reshape2 包有某种方法可以做到这一点,但很难想出一种方法来实现这一点。

解决方法

library(tidyverse)
initial_df %>% 
   pivot_wider(id_cols = a,names_from = b,values_from = c(c,d))