簡體   English   中英

當時間序列在行而不是列中時繪制 - 使用 R

[英]Plotting when time series is in rows not columns- using R

Excel 允許您在其圖表功能中切換行和列。

我正在嘗試在 R 中復制它。我的數據(如下所示)顯示了每個公司的生產情況。 我無法弄清楚如何在 x 軸上顯示第 1 個月、第 2 個月等,以及如何在同一圖表中顯示每個公司的系列。 任何幫助表示贊賞。

數據:

樣品表

tibble::tribble( ~Company.Name, ~Month-1, ~Month-2, ~Month-3, ~Month-4, "Comp-1", 945.5438986, 1081.417009, 976.7388701, 864.309703, "Comp 16448.87,13913.19,12005.28,10605.32, “樣Comp-3”,346.9689321,398.2297592,549.1282647,550.4207169, “樣Comp-4”,748.8806367,949.463941,1018.877481,932.3773791)

我將跳過您想要轉置的部分,並推斷您這樣做的目的僅僅是為了幫助繪圖。 我在這里關注的部分是“在 x 軸上顯示第 1 個月、第 2 個月等,並在同一圖表中顯示每個公司的系列”

這在基礎圖形中是可行的,但我強烈建議使用ggplot2 (或plotly或類似的),因為它易於處理這樣的維度圖。 “圖形語法”(兩者都傾向於實現)確實更喜歡這樣的數據采用“長”格式,因此我要做的部分工作是轉換為這種格式。

先說一些數據:

set.seed(2)
months <- paste0("Month", 1:30)
companies <- paste0("Comp", 1:5)
m <- matrix(abs(rnorm(length(months)*length(companies), sd=1e3)),
            nrow = length(companies))
d <- cbind.data.frame(
  Company = companies,
  m,
  stringsAsFactors = FALSE
)
colnames(d)[-1] <- months
str(d)
# 'data.frame': 5 obs. of  31 variables:
#  $ Company: chr  "Comp1" "Comp2" "Comp3" "Comp4" ...
#  $ Month1 : num  896.9 184.8 1587.8 1130.4 80.3
#  $ Month2 : num  132 708 240 1984 139
#  $ Month3 : num  418 982 393 1040 1782
#  $ Month4 : num  2311.1 878.6 35.8 1012.8 432.3
# (truncated)

可以使用多個庫完成重塑,包括基礎 R,這里有兩種技術:

library(data.table)
d2 <- melt(as.data.table(d), id = 1, variable.name = "Month", value.name = "Cost")
d2[,Month := as.integer(gsub("[^0-9]", "", Month)),]
d2
#      Company Month       Cost
#   1:   Comp1     1  896.91455
#   2:   Comp2     1  184.84918
#   3:   Comp3     1 1587.84533
#   4:   Comp4     1 1130.37567
#   5:   Comp5     1   80.25176
#  ---                         
# 146:   Comp1    30  653.67306
# 147:   Comp2    30  657.10598
# 148:   Comp3    30  549.90924
# 149:   Comp4    30  806.72936
# 150:   Comp5    30  997.37972

library(dplyr)
# library(tidyr)
d2 <- tbl_df(d) %>%
  tidyr::gather(Month, Cost, -Company) %>%
  mutate(Month = as.integer(gsub("[^0-9]", "", Month)))

我還將Month整數化,因為它對有序變量有意義。 這不是絕對必要的,情節只會將它們視為離散的。

情節是反高潮的簡單:

library(ggplot2)
ggplot(d2, aes(Month, Cost, group=Company)) +
  geom_line(aes(color = Company))

示例 ggplot2 圖

底線:我認為您無需擔心轉置數據:這樣做會帶來許多復雜性,只會使事情變得混亂。 重塑是一件好事(在我看來),但是這種數據足夠快,如果您的數據以寬格式存儲,您可以毫不費力地重新轉換它。 (但是,如果您正在考慮將其放入數據庫中,我強烈建議您重新考慮“寬”,如果您保留它,您的數據庫架構將具有挑戰性。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM