如何解决使用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
的{{1}}。
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
是整数,我们就很好。
解决方法
问题在于某些数据集的列与类型不匹配。选项将在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。