使用plyr合并数据帧以绘制多个时间序列

使用plyr合并数据帧以绘制多个时间序列,r,ggplot2,merge,R,Ggplot2,Merge,我想在一个绘图上绘制多个时间序列。目前我可以单独绘制它们,但不能一起绘制。我如何加入数据,因为年份是用小数分割的 我基本上想要的结果是这个(见第一个答案中的情节) 库(tidyverse) 图书馆(plyr) 主题组(主题组(10)) 悉尼1试试这个: Sydney1 %>% mutate(city = 'sydney1') %>% bind_rows(Sydney2 %>% mutate(city = 'sydney2')) %>% bind_rows(Eden

我想在一个绘图上绘制多个时间序列。目前我可以单独绘制它们,但不能一起绘制。我如何加入数据,因为年份是用小数分割的

我基本上想要的结果是这个(见第一个答案中的情节)

库(tidyverse)
图书馆(plyr)
主题组(主题组(10))
悉尼1试试这个:

Sydney1 %>% mutate(city = 'sydney1') %>%
  bind_rows(Sydney2 %>% mutate(city = 'sydney2')) %>%
  bind_rows(Eden %>% mutate(city = 'eden')) %>%
  bind_rows(Freemantle %>% mutate(city = 'freemantle')) %>%
  ggplot(aes(x=Year, y=SLR, color=city)) + geom_line() + facet_wrap(~city, scale='free')

假设您的全局环境仅包含要打印的数据帧:

bind_rows(mget(ls()), .id = "City") %>% 
ggplot(aes(x = Year, y = SLR, color = City)) +
  geom_line()

使用末尾注释中的数据首先将序列累加到列表L中——我们假设要添加具有列名
Year
SLR
的任何数据框——然后将其转换为单个zoo对象,并使用使用使用ggplot2的
autoplot.zoo
对其进行绘图。如果希望在单独的面中打印,请删除
facet=NULL
参数

library(ggplot2)
library(zoo)

is_city_df <- function(x) is.data.frame(x) && identical(names(x), c("Year", "SLR"))
L <- Filter(is_city_df, mget(ls()))
z <- do.call("merge", lapply(L, read.zoo))
autoplot(z, facet = NULL)
库(ggplot2)
图书馆(动物园)

is_city_df不是在全局环境中创建多个对象,而是可以在循环中一次读取所有对象

library(dplyr)
library(purrr)
library(ggplot2)
library(readr)
files <- c("Sydney1.csv", "Sydney2.csv", "Eden.csv", "Stonybay.csv", 
   "Lowhead.csv", "Hobart.csv", "Devonport.csv", "Freemantle.csv")
map_dfr(files, ~ read_csv(.x) %>% 
               mutate(City = .x)) %>%
   ggplot(aes(x = Year, y = SLR, color = City)) +
     geom_line())
库(dplyr)
图书馆(purrr)
图书馆(GG2)
图书馆(readr)
文件%
变异(城市=.x))%>%
ggplot(aes(x=年份,y=单反,颜色=城市))+
几何线()

谢谢你们两位,这真是太好了,更整洁了。非常感谢。您好,非常感谢您的评论。当我尝试运行此命令时,在match.fun(fun)中出现以下错误
错误:未找到对象“read.zoo”
您知道原因吗?您可能没有运行库语句。啊,是的,我运行了它们,但未安装
zoo
。使用
install.package后工作正常
谢谢!
Sydney1 <- 
structure(list(Year = c(1886.0417, 1886.125, 1886.2083, 1886.2917, 
1886.375, 1886.4583), SLR = c(6819L, 6942L, 6980L, 6958L, 7015L, 
6892L)), row.names = c(NA, 6L), class = "data.frame")

Sydney2 <-
structure(list(Year = c(1914.4583, 1914.5417, 1914.625, 1914.7083, 
1914.7917, 1914.875), SLR = c(7022L, 6963L, 6915L, 6924L, 6866L, 
6956L)), row.names = c(NA, 6L), class = "data.frame")

Eden <-
structure(list(Year = c(1986.7917, 1986.875, 1986.9583, 1987.0417, 
1987.125, 1987.2083), SLR = c(7003L, 6942L, 6969L, 7067L, NA, 
7015L)), row.names = c(NA, 6L), class = "data.frame")

Freemantle <-
structure(list(Year = c(1897.0417, 1897.125, 1897.2083, 1897.2917, 
1897.375, 1897.4583), SLR = c(6542L, 6524L, 6557L, 6655L, 6648L, 
6729L)), row.names = c(NA, 6L), class = "data.frame")
library(dplyr)
library(purrr)
library(ggplot2)
library(readr)
files <- c("Sydney1.csv", "Sydney2.csv", "Eden.csv", "Stonybay.csv", 
   "Lowhead.csv", "Hobart.csv", "Devonport.csv", "Freemantle.csv")
map_dfr(files, ~ read_csv(.x) %>% 
               mutate(City = .x)) %>%
   ggplot(aes(x = Year, y = SLR, color = City)) +
     geom_line())