r语言 - 熔化频率表以便使用ggplot2



我有一个"频率表";类似于这个

# 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

我试图使用melt()函数从reshape2包,但我没有得到我想要的,因为第二列没有出现(可能是因为它对应于表的行名)。

任何帮助都将不胜感激,

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包(v2.0.0)于2022-04-29创建

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

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

最新更新