r - R - 从文件名创建时间序列
问题描述
我有 900 个名为20120412_bwDD2yYa.txt
. _ 之前的第一部分是年-月-日格式。有些日子有多个文件与之关联。
我想使用从文件名中提取的日期作为数据来编译一个时间序列,其中日期是 x 轴,文件数是 y 轴。
我怎样才能做到这一点?
解决方案
这是使用 Base R 的解决方案。由于问题不包含可重现的示例,我们将模拟文件名,解析日期,并按日期创建计数。
# use list.files() to extract files from directory
files <- list.files(path="./data",pattern="*.txt",full.names = FALSE)
# simulate result from list.files()
files <- c("20120101_aaa.txt","20120101_bbb.txt","20120102_ccc.txt")
# extract dates from file names
date <- as.Date(substr(files,1,8),"%Y%m%d")
df <- data.frame(date,count = rep(1,length(date)))
aggregate(count ~ date,data = df, sum)
...和输出:
date count
1 2012-01-01 2
2 2012-01-02 1
dplyr 解决方案
一个dplyr::summarise()
看起来像这样的解决方案:
files <- list.files(path="./data",pattern="*.txt",full.names = FALSE)
# simulate result from list.files()
files <- c("20120101_aaa.txt","20120101_bbb.txt","20120102_ccc.txt")
library(dplyr)
data.frame(date=as.Date(substr(files,1,8),"%Y%m%d")) %>%
group_by(date) %>% summarise(count = n())
# A tibble: 2 x 2
date count
<date> <int>
1 2012-01-01 2
2 2012-01-02 1
计算没有文件的日期
为了回应对我的回答的评论,这里有一个解决方案,它填补了文件列表中的空白,其中有天数为 0 个文件。我们从文件列表中获取最小和最大日期,并创建一个包含日期序列的数据框。然后我们left_join()
使用之前聚合的数据,并将 NA 值重新编码为count
0。
# create a gap in dates with files
files <- c("20120101_aaa.txt","20120101_bbb.txt","20120102_ccc.txt",
"20120104_aaa.txt","20120104_aab.txt","20120104_aac.txt")
library(dplyr)
data.frame(date=as.Date(substr(files,1,8),"%Y%m%d")) %>%
group_by(date) %>% summarise(count = n()) -> fileCounts
# create df with all dates, left_join() and recode NA to 0
data.frame(date = as.Date(min(fileCounts$date):max(fileCounts$date),
origin = "1970-01-01")) %>%
left_join(.,fileCounts) %>%
mutate(count = if_else(is.na(count),0,as.numeric(count)))
...和输出:
Joining, by = "date"
date count
1 2012-01-01 2
2 2012-01-02 1
3 2012-01-03 0
4 2012-01-04 3
推荐阅读
- apache - 重写 XAMPP VirtualHost 中的 URL
- r - 从公共 github repro 安装 R 包时出现错误 404
- javascript - jsPdf中插入文本的结尾
- git - 不是 git add 一个额外的命令吗?
- c++ - 了解返回语句 (analogRead(A1) > 500 ? (1<<1) : 0)
- javascript - 错误:test_project/views/index.hbs:缺少助手:“ifCond”
- c# - 有没有办法监控 void 下的传入事件?
- java - Docker容器在远程服务器启动时崩溃,如何正确运行?
- reactjs - 如何使用 React-Spring 更改颜色。我想包括延迟和持续时间
- ios - 如何将文件从 iOS 反应原生应用程序保存到 Files 文件夹