使用dplyr将数据帧从宽转换为长

时间:2019-08-24 08:42:29

标签: r dplyr tidyverse

我想将数据库从宽格式转换为长格式,这样我就可以绘制出x轴上有年份,而y轴上有份额的图表。我想为每个家庭画一条线,因为目标是看到两个2034年值之间的差距。

这是我的数据框当前的外观: Current Dataframe

这是我想要的输出(我将x轴称为“ Year”,将y轴称为“ Share”) Desired output

我已经尝试通过以下方式使用“ dplyr”的“收集”选项:

gather(CPS_fam.long, Year, Share, 2:5)

但我认为重复的年份不是姓氏。

我无法提供数据,但是使用示例数据框的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为您已经获得了正确的代码,但是只需arrange Fam_Name来生成结果数据帧。

让我重现您的问题:

library(tidyverse)

df <- tibble("Fam_Name" = c("Architecture", "Arts", "Business"), "2002" = c(0.134, 0.116, 0.399), "2018" = c(0.161, 0.089, 0.06))

df %>% gather(., key = Year, value = Shares, c("2002", "2018"))

#  Fam_Name     Year  Shares
#  <chr>        <chr>  <dbl>
#1 Architecture 2002   0.134
#2 Arts         2002   0.116
#3 Business     2002   0.399
#4 Architecture 2018   0.161
#5 Arts         2018   0.089
#6 Business     2018   0.06 

现在,将arrange作为管道的最后一部分:


df %>% gather(., key = Year, value = Shares, c("2002", "2018")) %>% arrange(Fam_Name)

#  Fam_Name     Year  Shares
#  <chr>        <chr>  <dbl>
#1 Architecture 2002   0.134
#2 Architecture 2018   0.161
#3 Arts         2002   0.116
#4 Arts         2018   0.089
#5 Business     2002   0.399
#6 Business     2018   0.06 

这是您想要的吗?