【发布时间】:2020-05-16 05:27:57
【问题描述】:
我有一个如下所示的文件名列表:
files$name <-c("RePEc.aad.ejbejj.v.1.y.2010.i.0.p.84.pdf", "RePEc.aad.ejbejj.v.12.y.2017.i.2.p.1117.pdf", "RePEc.aad.ejbejj.v.2.y.2011.i.0.p.17.20.pdf", "RePEc.aad.ejbejj.v.2.y.2011.i.0.p.60.62.pdf")
我有一个更长的 ID 列表,它是更大数据框的一列,其中一些对应于文件名列表 (names),但这些名称有不同的标点符号。该列如下所示:
df$repec_id <- c("RePEc:aad.ejbejj:v:1:y:2010:i:0:p:84", "RePEc:aad:ejbejj:v:12:y.2017:i:2:p:1117", "RePEc:aad:ejbejj:v:2:y:2011:i:0:p:17-20", "RePEc:aad:ejbejj:v:2:y:2011:i:0:p:60-62", "RePEc:aad.ejbejj:v:1:y:2010:i:0:p:99","RePEc:aad.ejbejj:v:1:y:2010:i:0:p:103")
我想对df$repec_id 中的列表进行子集化,这样我就只有与files$name 中的文件名对应的字符串,但它们有不同的标点符号。换句话说,我想要一个如下所示的输出:
ID_subset <- c("RePEc:aad.ejbejj:v:1:y:2010:i:0:p:84", "RePEc:aad:ejbejj:v:12:y.2017:i:2:p:1117", "RePEc:aad:ejbejj:v:2:y:2011:i:0:p:17-20", "RePEc:aad:ejbejj:v:2:y:2011:i:0:p:60-62")
最初,我认为从两个列表中删除所有特殊字符然后比较它们会起作用。所以我这样做了:
files$name <- str_replace_all(files$name, "\\.pdf", "")
files$name <- str_replace_all(files$name, "[[:punct:]]", "")
df$repec_id <- str_replace_all(files$name, "[[:punct:]]", "")
subset <- df[trimws(df$repec_id) %in% trimws(files$name), ]
但是,我需要一种方法来保留 df$repec_id 中 ID 的原始结构,因为我需要提供来自 df$repec_id 的 ID 列表,这些 ID 不在子集中。有没有人有什么建议?提前感谢您的帮助!
【问题讨论】:
标签: r