使用R訪問美國國家提供商標識符(NPI)註冊表API(v2.1),由Medicare和Medicaid Services中心(CMS):https://npiregistry.cms.hhhs.gov/。獲取鏈接到特定個人或組織醫療保健提供商的豐富管理數據,或根據提供商名稱,位置,服務類型,憑據和許多其他屬性進行高級搜索。 npi
為數據提取提供了便利功能,因此您可以花更少的時間來爭吵數據,而更多的時間將數據投入工作。
使用醫療保健和公共衛生數據的分析師經常需要加入多個來源的數據以回答其業務或研究問題。不幸的是,在醫療保健中加入數據很難,因為很少有實體在組織邊界之間具有獨特的,一致的標識符。但是,NPI數字不會受到這些限制的困擾,因為所有符合某些常見標準的美國提供商都必須具有NPI編號,才能為其提供的服務報銷。這使得NPI數字對於加入提供商的多個數據集非常有用,提供商是開發此軟件包的主要動機。
有三種安裝npi
軟件包的方法:
install.packages( " npi " )
library( npi )
install.packages( " npi " , repos = " https://ropensci.r-universe.dev " )
library( npi )
devtools
軟件包從GitHub安裝: devtools :: install_github( " ropensci/npi " )
library( npi )
npi
導出四個功能,所有功能都匹配模式“ npi_*”:
npi_search()
:搜索NPI註冊表,並將響應返回,將其返回,將高心態數據組織到列表列中。npi_summarize()
:一種顯示npi_search()
結果概述的方法。npi_flatten()
:一種通過NPI編號連接的搜索結果中一個或多個列表列的方法。npi_is_valid()
:使用官方的NPI枚舉標準檢查一個或多個NPI編號的有效性。npi_search()
幾乎公開了NPPE API的所有搜索參數。假設我們想在紐約市找到多達10個擁有主要地點的提供商:
nyc <- npi_search( city = " New York City " )
# Your results may differ since the data in the NPPES database changes over time
nyc
# > # A tibble: 10 × 11
# > npi enume…¹ basic other_…² identi…³ taxono…⁴ addres…⁵ practi…⁶ endpoi…⁷
# > * <int> <chr> <list> <list> <list> <list> <list> <list> <list>
# > 1 1.19e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 2 1.31e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 3 1.64e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 4 1.35e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 5 1.56e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 6 1.79e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 7 1.56e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 8 1.96e9 Organi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 9 1.43e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 10 1.33e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > # … with 2 more variables: created_date <dttm>, last_updated_date <dttm>, and
# > # abbreviated variable names ¹enumeration_type, ²other_names, ³identifiers,
# > # ⁴taxonomies, ⁵addresses, ⁶practice_locations, ⁷endpoints
完整的搜索結果有四個常規向量列, npi
, enumeration_type
, created_date
和last_updated_date
和七個列表列。每個列表列是相關數據的集合:
basic
:有關提供商的基本個人資料信息other_names
:提供商使用的其他名稱identifiers
:其他提供商標識符和憑據信息taxonomies
:服務分類和許可信息addresses
:位置和郵寄地址信息practice_locations
:提供者的練習位置endpoints
:有關提供商的健康信息交換終點的詳細信息這些列表列中可能字段的完整列表可以在NPPE API幫助頁面上找到。
如果您願意使用列表列,則可能是包裝中所需的全部。但是, npi
還提供了可以幫助您匯總和改變搜索結果的功能。
npi
具有兩個主要的助手功能,用於處理搜索結果: npi_summarize()
和npi_flatten()
。
在結果上運行npi_summarize()
以查看您搜索結果的更可讀的概述。具體而言,該功能返回NPI號,提供商的姓名,枚舉類型(個人或組織提供者),主要地址,電話號碼和主要分類法(實踐領域):
npi_summarize( nyc )
# > # A tibble: 10 × 6
# > npi name enume…¹ prima…² phone prima…³
# > <int> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN Indivi… 5 E 98… 212-… Physic…
# > 2 1306849641 MARK MOHRMANN Indivi… 16 PAR… 212-… Orthop…
# > 3 1639173065 SAKSHI DUA Indivi… 10 E 1… 212-… Nurse …
# > 4 1346604592 SARAH LOWRY Indivi… 1335 D… 614-… Occupa…
# > 5 1558362566 AMY TIERSTEN Indivi… 1176 5… 212-… Psychi…
# > 6 1790786416 NOAH GOLDMAN Indivi… 140 BE… 973-… Intern…
# > 7 1558713628 ROBYN NOHLING Indivi… 9 HOPE… 781-… Nurse …
# > 8 1962983775 LENOX HILL MEDICAL ANESTHESIOLOGY, … Organi… 100 E … 212-… Intern…
# > 9 1427454529 YONGHONG TAN Indivi… 34 MAP… 203-… Obstet…
# > 10 1326403213 RAJEE KRAUSE Indivi… 12401 … 347-… Nurse …
# > # … with abbreviated variable names ¹enumeration_type,
# > # ²primary_practice_address, ³primary_taxonomy
如上所述, npi_search()
返回的數據框具有嵌套結構。儘管單行中的所有數據都與一個NPI相關,但每個列表列包含一個或多個值對應於該行NPI的值的列表。例如,提供商的NPI記錄可能具有多個關聯的地址,電話號碼,分類法和其他屬性,所有這些都活在數據框架的同一行中。
由於嵌套結構可能有些棘手,因此npi
包含npi_flatten()
,該功能將數據框架轉換為更易於使用(即,未打開和合併)結構,更易於使用。 npi_flatten()
執行以下轉換:
npi_flatten()
支持各種方法來平移npi_search()
的結果。一個極端是立即弄平一切:
npi_flatten( nyc )
# > # A tibble: 48 × 42
# > npi basic_fi…¹ basic…² basic…³ basic…⁴ basic…⁵ basic…⁶ basic…⁷ basic…⁸
# > <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 2 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 3 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 4 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 5 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 6 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 7 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 8 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 9 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 10 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > # … with 38 more rows, 33 more variables: basic_name <chr>,
# > # basic_name_prefix <chr>, basic_middle_name <chr>,
# > # basic_organization_name <chr>, basic_organizational_subpart <chr>,
# > # basic_authorized_official_credential <chr>,
# > # basic_authorized_official_first_name <chr>,
# > # basic_authorized_official_last_name <chr>,
# > # basic_authorized_official_middle_name <chr>, …
但是,由於字段數量和值的大量值組合,該方法最適合小型數據集。更有可能的是,您需要在一個通過中從原始數據框架中弄平少數列表列,並在事實之後使用所需的其他列表列重複該過程並合併。例如,要使基本提供商和提供商分類信息提交,請將相應的列表列作為名稱向量提供給cols
參數:
# Flatten basic provider info and provider taxonomy, preserving the relationship
# of each to NPI number and discarding other list columns.
npi_flatten( nyc , cols = c( " basic " , " taxonomies " ))
# > # A tibble: 20 × 26
# > npi basic_fi…¹ basic…² basic…³ basic…⁴ basic…⁵ basic…⁶ basic…⁷ basic…⁸
# > <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 2 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 3 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 4 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 5 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 6 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 7 1346604592 SARAH LOWRY OTR/L YES F 2016-0… 2018-0… A
# > 8 1346604592 SARAH LOWRY OTR/L YES F 2016-0… 2018-0… A
# > 9 1427454529 YONGHONG TAN <NA> NO F 2014-1… 2018-1… A
# > 10 1558362566 AMY TIERST… M.D. YES F 2005-0… 2019-0… A
# > 11 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 12 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 13 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 14 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 15 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 16 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 17 1639173065 SAKSHI DUA M.D. YES F 2005-0… 2019-0… A
# > 18 1639173065 SAKSHI DUA M.D. YES F 2005-0… 2019-0… A
# > 19 1790786416 NOAH GOLDMAN M.D. NO M 2005-0… 2018-0… A
# > 20 1962983775 <NA> <NA> <NA> <NA> <NA> 2018-0… 2018-0… A
# > # … with 17 more variables: basic_name <chr>, basic_name_prefix <chr>,
# > # basic_middle_name <chr>, basic_organization_name <chr>,
# > # basic_organizational_subpart <chr>,
# > # basic_authorized_official_credential <chr>,
# > # basic_authorized_official_first_name <chr>,
# > # basic_authorized_official_last_name <chr>,
# > # basic_authorized_official_middle_name <chr>, …
就像信用卡號一樣,NPI號可能會在運輸中誤入歧途或損壞。同樣,官方發行的NPI編號具有檢查數字以進行錯誤檢查。使用npi_is_valid()
檢查您遇到的NPI號是否是有效構造的:
# Validate NPIs
npi_is_valid( 1234567893 )
# > [1] TRUE
npi_is_valid( 1234567898 )
# > [1] FALSE
請注意,此功能不會檢查NPI號是激活還是停用(請參見#22)。它僅檢查了該數字與NPI規範的一致性。因此,它可以幫助您儘早檢測和處理數據質量問題。
用戶代理是與API交互的軟件來告訴它是誰或什麼是提出請求的方式。這有助於API的維護者了解哪些系統正在使用API。默認情況下,當npi
向NPPES API提出請求時,請求標題引用了包裝的名稱和存儲庫的URL(例如,'npi/0.2.0(https://github.com/ropensci/npi) ')。如果要設置自定義用戶代理,請更新npi_user_agent
選項的值。例如,對於稱為“ my_app”的應用程序的1.0.0版,您可以運行以下代碼:
options( npi_user_agent = " my_app/1.0.0 " )
npi
有一個網站,其中包含發行說明,所有用戶功能的文檔,以及顯示如何使用軟件包的示例。
你發現一個錯誤嗎?我很想在“問題”頁面上聽到有關它的消息。
請注意,此軟件包已發布帶有貢獻者的行為準則。通過為該項目做出貢獻,您同意遵守其條款。
有興趣學習如何為NPI做出貢獻嗎?前往撰稿人指南,並感謝您的考慮!
有關最新引用,請參閱包裝網站上的作者和引文頁面。
麻省理工學院(c)弗蘭克·法拉赫(Frank Farach)
該套餐的徽標已根據CC BY-SA 4.0許可,並由Frank Farach和Sam Parmar共同創建。該徽標使用Asclepius桿的圖像的修改版和歸因於Evanherk GFDL的放大鏡。