如何解决R : 在 read_fwf
我发现了一个非常奇怪的现象,read_fwf
与 tidyr::separate
相关联。 tidyr::separate
在处理 read_fwf
导入的数据时速度慢得要命,但如果使用 read_delim
导入相同的数据则不然。
这是重现问题的方法。唯一的方法是下载原始文件:https://www.riziv.fgov.be/webprd/appl/pDownloadcenter/download/ProductionTXT-Base-Full-2021-07-01.zip。抱歉,我没能通过 dput 做到这一点:如果我在用 dput(head(object,20))
加载的对象上执行 read_fwf
并且在用 read_delim
加载后在同一个对象上执行,结果是完全一样,如果我从 dput 生成的代码中加载数据,就没有问题了。所以我不知道如何在没有原始文件的情况下为您提供可复制的示例。我有 readr 2.0.0
、tidyr 1.1.3
和 R 4.1.0
。
这里,对于由 read_fwf
导入的对象,separate
需要 1min10 :
library(tidyverse)
options(encoding = "UTF-8")
# I import with read_fwf
d21_HCW <- read_fwf (
file = "SZVBaseHCW_Full_2021-07-01_ano.txt",fwf_positions (c(1,35,43,53,55),c(34,42,52,54,NA)),locale = locale(encoding = 'latin1')
)
# I separate in new columns a part of the data
d21_HCW_type11 <- filter(d21_HCW,X4 == 11) %>%
separate(X5,sep = c(6,17,65,77,89,97,105,106,107,113,115,147,151,155,160,165),into = c("INAMI","registre","nom","prenom1","prenom2","birthdate","deces","langue","sexe","INAMI2","check_INAMI2","rue_t11","num_rue_t11","num_boite_t11","code_postal_t11","code_INS_t11","localite_t11")
)
但是如果我以 CSV 格式导出数据,然后使用 read_delim
重新导入它,那么 separate
再次快速工作...在这种情况下,separate
需要 6 秒:
# I write data in a CSV
write.csv2(d21_HCW,file = "SZVBaseHCW_Full_2021-07-01_ano.csv")
# I import data again with read_delim
d21_HCW <- read_delim("SZVBaseHCW_Full_2021-07-01_ano.csv",delim = ";",escape_double = FALSE,col_types = cols(...1 = col_skip()),trim_ws = TRUE)
# I do separate again
d21_HCW_type11 <- filter(d21_HCW,"localite_t11")
)
知道为什么会有这种奇怪的行为吗? 我已经找到了 read_delim 的解决方案,我发布了这个问题是为了好奇地知道发生了什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。