我试图最终得到一个时间序列图,比较不同城市的center
数据(数据框)。其中center
是R studio中的数据框对象,我已导入。
我有一个包含165个csv文件的文件夹,每个文件代表一个城市。我想在一个图中加上center
数据框绘制所有165个csv文件(作为独立名称/数据框)。
我希望它看起来像这样:( x轴是时间,y轴是CO,所有都是纯色。
我想对每个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.
总的来说,我想要所有165个城市(csv文件)的上述情节。我需要帮助将四个动作放在每个csv文件上并将它们全部绘制在一个图中。
对于情节, 我做了这个例子:
ggplot(center, aes(rtime, CO)) + geom_smooth(aes(color="Center"))+
geom_smooth(data=city1,aes(color="City1"))+
labs(color="Legend")
更新: 每个城市的csv文件似乎已合并创建一行。我不确定是否可以发布确切的输出,但它看起来像下面的那个:粉色线是城市,蓝色是中心.X轴时间和y轴是CO。我希望这会有所帮助。
unique(df.cleaned$cities)
> unique(df.cleaned$cities)
[1] "WFH4N_YEK04_PORTLAND_08AUG16_R1"
[2] "WFH2N_QIM23_AUSTIN_30JUL16_R1"
[3] "WFH7N_QIM70_NEWYORK_20JUL16_R1"
[4] "WFH3N_YEK28_NAMPA_23AUG16_R1"
[5] "WFH9N_YEK18_MESA_12JUL16_R1"
[6] "WFH6N_QIM10_OAKLAND_11AUG16_R1"
[7] "WFH3N_YEK01_DETROIT_30AUG16_R1"
[8] "WFH6N_YEK05_ATLANTA_30AUG16_R1"
[9] "WFH1N_YEK32_LONGBEACH_01JUL16_R1"
[10] "WFH8N_YEK39_LOSANGELES_30AUG16_R1"
[11] "WFH5N_YEK59_BALTIMORE_31AUG16_R1"
[12] "WFH1N_QIM19_MEMPHIS_01JUL16_R1"
[13] "WFH0N_YEK2087_DENVER_09JUL16_R1"
[14] "WFH4N_QIM43_CLEVELAND_30AUG16_R1"
[15] "WFH8N_QIM65_HARTFORD_30AUG16_R1"
[16] "WFH2N_YEK66_SEATTLE_30AUG16_R1"
[17] "WFH0N_YEK17_SANJOSE_30AUG16_R1"
答案 0 :(得分:1)
这是一个完全tidyverse
解决方案,因此基础R传统主义者现在可以把目光移开。
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", ""))
yourfilepath
名为 *。csv 。 purrr::map
来运行。{
files
变量的每个元素上的相同函数:read_csv
,
跳过前25行。 dfs
中的数据框。 unnest()
将这些扩展为完整版
数据帧,根据需要重复files
行。 files
获取路径的额外部分以获取您的城市名称,
假设.CSV的文件名是城市的名称。
mutate(cities = ...)
行。现在很容易做其余事情:
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 = " "))