我有一系列数千个链接到处方药标签的 URL,我试图找出有多少个 URL 带有患者药品说明书。我尝试通过读取数据框中的 URL,然后使用 XML 包解析 html,最后使用 grep 执行对字符串“Patient Package Insert”的搜索来实现此目的。最终,我试图计算患者说明书上处方药标签的数量。
我在下面整理了一个玩具示例:
library(XML)
urls <- c("http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?setid=a002b40c-097d-47a5-957f-7a7b1807af7f",
"http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?setid=1842bb9f-60ab-4af9-95a4-1cfc3645ee6b",
"http://dailymed.nlm.nih.gov/dailymed/lookup.cfm?ndc=50419-758&start=1&labeltype=all")
Data <- data.frame(urls)
Data$insert <- lapply(Data$urls, function(x) {
y <- xmlToList(htmlParse(x))
y.flat <- unlist(y, recursive = TRUE)
length(grep("Patient Package Insert", c(y.flat,names(y.flat))))
})
Data <- as.data.frame(lapply(Data, unlist))
count(Data$insert)
目前,它正在获取每个网页中包含的“患者包裹插入”链接,但只有其中一些是活动的。举例来说,上面的玩具示例中包含的第二个和第三个 URL 不具有指向“患者包裹插入”的活动链接(呈灰色),我不想将其计入最终列表中。理想情况下,我只想标记第一个链接,其中包括功能性的“患者包裹插入”链接。有谁知道如何在 R 中最好地做到这一点?如果是这样,我将非常感谢任何和所有的帮助。
非常感谢,
Chris
您可以使用类似以下内容:
xData <- lapply(Data$urls, htmlParse)
ppiData <- lapply(xData, FUN = xpathApply, path = "/descendant-or-self::*[contains(@title, 'Patient Package Insert')]", fun = xmlAttrs)
ppiData
[[1]]
[[1]][[1]]
title href class
"Patient Package Insert" "#nlm42230-3" "nlmlinktrue"
[[2]]
[[2]][[1]]
title href class
"Patient Package Insert" "#nlm42230-3" "nlmlinkfalse"
[[3]]
[[3]][[1]]
title href class
"Patient Package Insert" "#nlm42230-3" "nlmlinkfalse"
在这个简单的示例中,您可以处理数据框:
ppiData <- lapply(ppiData, function(x){data.frame(as.list(x[[1]]))})
ppiData <- do.call(rbind, ppiData)
> ppiData
title href class
1 Patient Package Insert #nlm42230-3 nlmlinktrue
2 Patient Package Insert #nlm42230-3 nlmlinkfalse
3 Patient Package Insert #nlm42230-3 nlmlinkfalse
使用您的真实数据集,第二步可能会更多地涉及可能的多个条目等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)