【问题标题】:Pivot table from multiple columns while grouping in R在R中分组时从多列数据透视表
【发布时间】:2020-12-29 08:15:27
【问题描述】:

我正在努力使用 R 中的 pivot_longer 将宽数据集转换为长数据集。对于下面的示例,我将每个物种的捕获数据作为一列。我想输出一个数据框,其中 FIRST 列是 Species,每一行都是一个数据点,Year 和 Country 也作为列。我想稍后对这些进行分组和平均,以便我可以绘制它们。有谁知道如何使用 pivot_longer 实现这一目标?

 Data <- data.frame(
 Country = c("a", "a", "c", "c", "a", "b"),
 Year = c("1990", "1990", "1991", "1992", "1990", "1990"),
 Tiger_Shark = c(0,1,4,7,5,6)  ,
 Whale_shark = c(0, 20, 14, 19, 2,7),
 White_shark = c(0, 0, 12, 29, 1,8))

我尝试了以下方法:

data %>% 
pivot_longer( cols= Tiger_Shark:White_shark,  
          names_to = c(" Tiger", "Whale", "White"),
          values_to = "catch") 

但这不会保留我想保留的 Year 或 Country 列。我认为解决方案很简单,但我不熟悉pivot_longer。非常感谢!!

【问题讨论】:

  • 你需要Data %&gt;% pivot_longer(cols = Tiger_Shark:White_shark) %&gt;% group_by(Country, Year) %&gt;% summarise(value = mean(value))

标签: r dplyr tidyverse


【解决方案1】:

如果我们想使用ggplot,请重新整形为“长”格式,然后进行绘图。分组后可以在summarise内进行汇总,然后进行整形

library(dplyr)
library(tidyr)
library(ggplot2)
Data %>%
   group_by(Year, Country) %>% 
   summarise(across(everything(), mean)) %>%
   pivot_longer(cols = Tiger_Shark:White_shark) %>%
   ggplot(aes(x = Country, y = value, fill = Year)) + 
     geom_col()

或者先reshape成'long'格式,然后按summarise做一个group

Data %>% 
 pivot_longer(cols = Tiger_Shark:White_shark) %>%
 group_by(Country, Year) %>% 
 summarise(value = mean(value))

names_to 在这里应该是一个元素,因为这些列似乎属于一个组

【讨论】:

  • 效果很好,非常感谢!我添加了 names_to = "Species" 来创建另一列,这样我也可以用它来填充另一个绘图。例如:Data %&gt;% group_by(Year, Country) %&gt;% summarise(across(everything(), mean)) %&gt;% pivot_longer(cols = Tiger_Shark:White_shark, names_to = "Species") %&gt;% ggplot(aes(x = Country, y = value, fill = Year)) + geom_col()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多