0

処方薬のラベルにリンクしている一連の数千の 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)

現時点では、これらの Web ページのそれぞれに含まれている「患者パッケージ挿入物」へのリンクをピックアップしていますが、それらの一部のみがアクティブになっています。例として、上記のおもちゃの例に含まれる 2 番目と 3 番目の URL には、「患者パッケージ挿入物」へのアクティブなリンクが含まれていません (グレー表示されています)。理想的には、機能する「患者パッケージ挿入物」リンクを含む最初のリンクのみにフラグを付けたいと思います。Rでこれを行う最善の方法を知っている人はいますか? もしそうなら、私はあらゆる助けを大いに感謝します.

どうもありがとう、

クリス

4

2 に答える 2

1

次のようなものを使用できます。

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

実際のデータセットでは、2番目のステップは、複数のエントリが可能になるなど、もう少し複雑になる可能性があります.

于 2013-07-13T04:27:15.310 に答える
0

grepish 値だけでなく、返された HTML 値を見ると、次のことがわかります。

$body$div$div$fieldset$div$ul$li$a$.attrs
                   title                     href                    class 
"Patient Package Insert"            "#nlm42230-3"           "nlmlinkfalse" 

...しかし、その上のアイテムには「nlmlinktrue」のクラス値があります。$body$div$div$fieldset$div$ul$li$a$.textそのため、残念ながら名前のないノードをすべて調べて、「Patient Package Insert」項目を見つけ、その$body$div$div$fieldset$div$ul$li$a$.attrsクラス値を確認する必要があるかもしれません。

3 番目の項目を手作業で行うと、次のようになります。

Data$insert[[3]]$body[14]$div[12]$div[2]$fieldset[3]$div[2]$ul[27]$li[2]

$a
$a$text
[1] "Patient Package Insert"

$a$.attrs
                   title                     href                    class 
"Patient Package Insert"            "#nlm42230-3"           "nlmlinkfalse" 

手動で行うには、「Package Insert」を含む次のノードを grep で見つけることができます。

> head(sapply( Data$insert[[3]], FUN=grep, patt="Package Insert" ))
$head
integer(0)

$body
[1] 14

$.attrs
integer(0)

> head(sapply( Data$insert[[3]]$body[14], FUN=grep, patt="Package Insert" ))
div 
 12 
> 
于 2013-07-12T23:56:11.910 に答える