r - 使用 R 跨文件夹中的文件的错误 map_df
问题描述
所以我有一个文件文件夹,每个“几乎”相同的 CSV 文件。它们每个看起来都像:
EMP ID WORK DATE WORK HOURS JOB TITLE MGMT CTR
002 01/02/2019 8 Janitor 44
003 01/03/2019 29 Analyst 044
004 01/02/2019 400 Barber 2
...
我说几乎是因为其中一些有一些额外的变量,但我只关心其中两个。
使用下面的代码,理论上我可以根据WORK DATE
和WORK HRS
(我关心的两个变量)将它们组合在一起。
test <- list.files(path = "path", full.names = TRUE) %>%
map_dfr(read.csv) %>%
select(WORK.DATE,WORK.HRS) %>%
group_by(WORK.DATE) %>%
summarize(hour_sum = sum(WORK.HRS))
我这样做,我得到一个错误:
Error: Can't combine `..1$JOB.NUM` <double> and `..2$JOB.NUM` <character>.
这些变量似乎来自一两个奇怪的文件。但我不需要它们,我认为 select 语句会有所帮助......它没有。我试过readr
's read_csv
。
test <- list.files(path = "path", full.names = TRUE) %>%
map_dfr(read_csv) %>%
select(`WORK DATE`,`WORK HRS`) %>%
group_by(`WORK DATE`) %>%
summarize(hour_sum = sum(`WORK HRS`))
并得到一个类似的错误:
Error: Can't combine `MGMT CTR` <double> and `MGMT CTR` <character>.
真的,我只关心这两个变量,只要WORK DATE
是字符或日期并且WORK HRS
是整数,我们就可以了。
解决方案
问题是某些数据集的列与类型不匹配。一个选项将在其中转换为单一类型map_df
,然后更改类型
library(dplyr)
library(purrr)
library(readr)
library(lubridate)
list.files(path = "path", full.names = TRUE) %>%
map_dfr(~ read_csv(.x) %>%
mutate(across(everything(), as.character))) %>%
select(`WORK DATE`,`WORK HRS`) %>%
type.convert(as.is = TRUE) %>%
group_by(`WORK DATE` = mdy(`WORK DATE`)) %>%
summarize(hour_sum = sum(`WORK HRS`)) # assume that "WORK HRS" is numeric
推荐阅读
- python - SQLAlchemy 表创建不区分大小写的列
- python - pySerial 捕获长响应
- python - 如何使用连接将collatz函数生成的序列中的数字变成字符串
- python - pyqt在Qgraphicsscene中添加矩形
- windows - 在 Windows 批处理脚本的 for 循环中获取子字符串
- python - 用 pandas to_html 格式化 £ 符号
- eucalyptus - eucalyptus-cloud.service 4.4.4 不断因 JVM 内存错误而崩溃
- javascript - 随机显示一个 HTML DIV
- javascript - DOM 视图未更新,角度不在区域中
- android - Firebase 子侦听器回调返回一个值,第二个值返回 null