1

我正在尝试在 R 中创建一个线图,随着时间的推移显示不同位置的线。

我的数据在Year第一列的表格中,这些地方England, Scotland, Wales, NI作为单独的列:

     Year   England Scotland Wales  NI
1  2006/07      NA     411   188   111
2  2007/08      NA     415   193   112
3  2008/09      NA     424   194   114
4  2009/10      NA     429   194   115
5  2010/11      NA     428   199   116
6  2011/12      NA     428   200   116
7  2012/13      NA     425   199   117
8  2013/14      NA     427   202   117
9  2014/15      NA     431   200   121
10 2015/16   3556      432   199   126
11 2016/17   3436      431   200   129
12 2017/18   3467      NA    NA    NA

我正在使用 ggplot,并且可以获得任何地方的线图,但是我很难为同一地块上的所有地方获取线。

如果我在列中也有位置(而不是在顶部),这似乎可行,因为然后我可以在下面的代码中将 y 设置为该列,而不是特定位置的列。但这似乎有点令人费解,因为我有很多现有格式的数据,我希望有一种方法可以用我拥有的格式来做到这一点,或者有一种快速的方法来转换它。

ggplot(data=mysheets$sheet1, aes(x=Year, y=England, group=1)) +
  geom_line()+
  geom_point()

据我所知,我需要重塑我的数据(变成长格式?)但我还没有找到一种方法来做到这一点,因为我没有地方的列(即,我每个地方都有一个列)地方,但桌子没有办法说这些都是地方和同一种东西)。

我也尝试过转置我的数据,所以这些地方在一边,年份在顶部,但 R 仍然有自己的列标题 - 我想另一个选择可能是如果有可能将年份作为标头并被 R 识别?

4

1 回答 1

2

正如您所说,您必须转换为长格式才能充分利用ggplot2.

library(ggplot2)
library(dplyr)

mydata_raw <- read.table(
  text = "
  Year   England Scotland Wales  NI
  1  2006/07      NA     411   188   111
  2  2007/08      NA     415   193   112
  3  2008/09      NA     424   194   114
  4  2009/10      NA     429   194   115
  5  2010/11      NA     428   199   116
  6  2011/12      NA     428   200   116
  7  2012/13      NA     425   199   117
  8  2013/14      NA     427   202   117
  9  2014/15      NA     431   200   121
  10 2015/16   3556      432   199   126
  11 2016/17   3436      431   200   129
  12 2017/18   3467      NA    NA    NA"
)

# long format
mydata <- mydata_raw %>% 
  tidyr::gather(country, value, England:NI) %>% 
  dplyr::mutate(Year = as.numeric(substring(Year, 1, 4))) # convert to numeric date

ggplot(mydata, aes(x = Year, y = value, color = country)) + 
  geom_line() +
  geom_point()

在此处输入图像描述

于 2018-04-02T14:53:06.790 回答