有没有一种简单的方法可以在对其中一列的值进行分组的同时获得数据框的转置? [重复]

问题描述 投票:0回答:1

我有以下数据框:

df <- data.frame(group = c("A","A","A","B","B","C","C","C"), 
            year = c("2018","2019","2020", "2019","2020","2019","2020","2021"),
            amount = c(10,20,30,40,50,60,70,80))

我想获得以下目标数据框:

target.df <- data.frame(group = c("A","B","C"), 
                   "2018" = c(10,0,0), "2019"= c(20,40,60),
                   "2020"=c(30, 50, 70),"2021" = c(0, 0, 80))

到目前为止,我正在使用 split(df, df$group) 拆分数据并逐行生成数据。我知道这样效率很低,我想知道是否有更快更简单的方法,谢谢!

r dataframe data-cleaning transpose reformatting
1个回答
1
投票

这是一个典型的pivot_wider操作。 我们可以使用

tidyr::pivot_wider

library(tidyr)

df |> 
    pivot_wider(names_from = year,
                values_from = amount,
                values_fill = 0,
                names_glue = "X{year}")

# A tibble: 3 × 5
  group X2018 X2019 X2020 X2021
  <chr> <dbl> <dbl> <dbl> <dbl>
1 A        10    20    30     0
2 B         0    40    50     0
3 C         0    60    70    80
© www.soinside.com 2019 - 2024. All rights reserved.