熔化一个频率table以便使用ggplot2

Melt a frequency table in order to use ggplot2

我有一个与这个相似的“频率table”

# Create a matrix
  df<- matrix(sample(0:10,35,replace=T),nrow=5, ncol=7)
# Rename columns and rows
  colnames(df) <- c("Monday","Tuesday", "Wednesday", "Thursday", "Friday",
                    "Saturday", "Sunday")
  row.names(df) <- c(2015, 2016, 2017, 2018, 2019)

我想使用 ggplot2 来表示信息,但我需要将此信息转换成如下形式:

Day       Year  Frequency
Monday    2015  10
Monday    2016  7
Monday    2017  13

我尝试使用 reshape2 包中的 melt() 函数,但我没有得到我想要的,因为第二列没有出现(可能是因为它对应于 table).

如有任何帮助,我们将不胜感激,

你的第一列实际上是你的行名,当你转换为数据框时,它不算作一列。因此,首先,将矩阵转换为数据框,然后将行名称添加到数据框 (rownames_to_column),然后使用 melt:

reshape2::melt(tibble::rownames_to_column(data.frame(df)))
library(tidyverse)

# Create a matrix
df <- matrix(sample(0:10, 35, replace = T), nrow = 5, ncol = 7)
# Rename columns and rows
colnames(df) <- c(
  "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
  "Saturday", "Sunday"
)
row.names(df) <- c(2015, 2016, 2017, 2018, 2019)

df %>%
  as_tibble(rownames = "year") %>%
  pivot_longer(-year)
#> # A tibble: 35 × 3
#>    year  name      value
#>    <chr> <chr>     <int>
#>  1 2015  Monday        9
#>  2 2015  Tuesday       5
#>  3 2015  Wednesday     6
#>  4 2015  Thursday      9
#>  5 2015  Friday        6
#>  6 2015  Saturday     10
#>  7 2015  Sunday        3
#>  8 2016  Monday       10
#>  9 2016  Tuesday       2
#> 10 2016  Wednesday     6
#> # … with 25 more rows

reprex package (v2.0.0)

于 2022-04-29 创建