R:在一个时间序列图中独立打印多个csv文件(也可导入带条件的csv文件)

R:在一个时间序列图中独立打印多个csv文件(也可导入带条件的csv文件),r,csv,ggplot2,import,time-series,R,Csv,Ggplot2,Import,Time Series,我试图以一个时间序列图结束,该图使用中心数据(数据帧)比较不同的城市。如果中心是R studio中的数据帧对象,我已经导入了 我有一个包含165个csv文件的文件夹,每个文件代表一个城市。我想将所有165个csv文件(作为独立名称/数据帧)绘制在一个绘图中,再加上中心数据帧 我希望它看起来像这样:(x轴是时间,y轴是共轴,所有的颜色都是纯色 我想对每个csv文件做四件事,但最后,让它自动对165个csv文件中的每一个执行这四个操作 1) 跳过csv文件的前25行 2) 合并每个csv文件的日期

我试图以一个时间序列图结束,该图使用
中心
数据(数据帧)比较不同的城市。如果
中心
是R studio中的数据帧对象,我已经导入了

我有一个包含165个csv文件的文件夹,每个文件代表一个城市。我想将所有165个csv文件(作为独立名称/数据帧)绘制在一个绘图中,再加上
中心
数据帧

我希望它看起来像这样:(x轴是时间,y轴是共轴,所有的颜色都是纯色

我想对每个csv文件做四件事,但最后,让它自动对165个csv文件中的每一个执行这四个操作

1) 跳过csv文件的前25行

2) 合并每个csv文件的日期和时间列

3) 删除第3列单元格中的值为空的行

4) 将第3列的名称从ug/m3更改为CO

我希望它能够以自动方式对165个csv文件中的每个文件执行四个操作。然后,能够在一个绘图中高效地绘制新更新的csv文件

我在一个csv文件上使用了下面的代码,以查看它是否可以在一个csv文件上工作。我不知道如何以有效的方式组合所有内容。实现以下目标:

city1 <- read.csv("path",
                        skip = 25)

city1$rtime <- strptime(paste(city1$Date, city1$Time), "%m/%d/%Y %H:%M")

colnames(city1)[3] <- "CO"

city[,3][!(is.na(city[,3]))] ## side note: help with this would be appreciated, I was unsure of what goes before the comma.
更新: 每个城市的csv文件似乎结合在一起创建了一行。我不确定是否可以发布准确的输出,但它看起来像下面的一行:粉红色的线是城市,蓝色的是中心。x轴时间,y轴是CO。我希望这有帮助

unique的结果(df.cleaned$cities)


这是一个完全的
tidyverse
解决方案,因此,传统主义者们,现在把目光移开

library(dplyr)
library(purrr)
library(tidyr)
library(readr)
library(stringr)
library(lubridate)
# or just library(tidyverse)

df <-
  data_frame(files = list.files(path = "./yourfilepath",    
                                pattern = "csv", 
                                full.names = T)) %>%
    mutate(dfs = map(files, read_csv, skip = 25)) %>%       
    unnest() %>% 
    mutate(cities = str_replace_all(files, "./yourfilepath/", ""),
           cities = str_replace_all(cities, ".csv", ""))
现在使用略作更新的绘图代码:

ggplot(center, aes(rtime, CO)) + 
  geom_smooth(aes(color="Center"))+
  geom_smooth(data = df.cleaned, aes(color = cities))+
  labs(color="Legend")

使用更多正则表达式更新
df.0%
分组依据(文件)%>%
变异(城市=str_c(str_extract_all)(城市,
“[A-Z][A-Z]+”,
简化=T),
塌陷=”))

要自动读取165个csv文件,您可以获取所有csv文件名的字符向量,然后对文件名进行重叠。例如,
file_name和我发布的正则表达式,所有这些都将解析为“”,因为您的城市名称是大写的,而不是像您给出的示例那样的标题大小写。如果您不尝试提取城市名称,而是将该列保留为那样的
cities
,那么您的绘图应该为每一个城市都有单独的行,如
aes(color=cities)
所示。这部分正确吗?@Brian当我意识到我给出的示例不同时,我决定不尝试正则表达式。没有添加正则表达式,它仍然给了我一行。如果没有一些样本数据,我恐怕无法重现错误。你能分享1-2个csv吗?还是它们太大了?谢谢你的回答。我想问一个后续问题,如果cites的名称嵌入csv文件的文件名中,比如
UGF2N_GDUM122_Chicago_03FEB16_R1
UGF2N\u GDUM122\u Chicago\u 03FEB16\u R1
然后您需要编写一些正则表达式,除去名称之外的所有内容。在没有看到更多示例的情况下,我真的无法猜测什么可能有用,但我将在我的答案中发布一个可能的第一次尝试。@Brain.抱歉,我没有完成评论并按enter键。谢谢您的回答。我想问一个后续问题,如果城市名称嵌入csv文件的文件名中,如
UGF2N\u GDUM122\u Chicago\u 03FEB16\u R1
WCK60\u UBST122\u Austin\u 13NOV16\u R1
等都有不同的名称,但都嵌入了城市名称。是否有办法仅提取城市名称。此外,随着3的升高,其为µg/m3。有没有办法在R studio上实现这一点?有没有办法提高3?或者可以说替换第3列?关于第二个问题,您是否询问用µg/m^3标记绘图?或者您正在询问如何修复从CSV进入R的名称?我上面发布的代码已经将该列重命名为“CO”。@Brain我在问后者。µg/m^3是CSV文件中列的名称,当我在Rstudio中查看它时(其中3是凸起的),我不确定如何复制凸起部分。当我使用µg/m3时,发生了此错误,``µg/m3`包含未知变量`
library(dplyr)
library(purrr)
library(tidyr)
library(readr)
library(stringr)
library(lubridate)
# or just library(tidyverse)

df <-
  data_frame(files = list.files(path = "./yourfilepath",    
                                pattern = "csv", 
                                full.names = T)) %>%
    mutate(dfs = map(files, read_csv, skip = 25)) %>%       
    unnest() %>% 
    mutate(cities = str_replace_all(files, "./yourfilepath/", ""),
           cities = str_replace_all(cities, ".csv", ""))
df.cleaned <- df %>%
  rename(CO = `ug/m3`) %>%
  filter( !is.na(CO)) %>%
  mutate(rtime = paste(Date, Time),
         rtime = mdy_hm(rtime))
ggplot(center, aes(rtime, CO)) + 
  geom_smooth(aes(color="Center"))+
  geom_smooth(data = df.cleaned, aes(color = cities))+
  labs(color="Legend")
df.cleaned <- df.cleaned %>%
  group_by(files) %>%
  mutate(cities = str_c(str_extract_all(cities, 
                                  "[A-Z][a-z]+", 
                                  simplify = T), 
                        collapse = " "))