project

library(haven)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.1     ✔ readr     2.2.0
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.3     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom)

# Read the NHANES DPQ_L dataset directly from the CDC URL
url <- "https://wwwn.cdc.gov/Nchs/Data/Nhanes/Public/2021/DataFiles/DPQ_L.xpt"
dpq_data <- read_xpt(url)

# Preview the data and its variable labels
head(dpq_data)
# A tibble: 6 × 11
    SEQN DPQ010 DPQ020 DPQ030 DPQ040 DPQ050 DPQ060 DPQ070 DPQ080 DPQ090 DPQ100
   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 130378     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
2 130379      0      0      1      0      0      0      0      0      0      0
3 130380      0      0      1      1      0      0      0      0      0      0
4 130386      0      0      0      0      0      1      0      0      0      0
5 130387      0      0      0      0      0      0      0      0      0     NA
6 130388     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
View(dpq_data)
url2 <- "https://wwwn.cdc.gov/Nchs/Data/Nhanes/Public/2021/DataFiles/DEMO_L.xpt"
dpq_data_demo <- read_xpt(url2)
View(dpq_data_demo)
glimpse(dpq_data_demo)
Rows: 11,933
Columns: 27
$ SEQN     <dbl> 130378, 130379, 130380, 130381, 130382, 130383, 130384, 13038…
$ SDDSRVYR <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1…
$ RIDSTATR <dbl> 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
$ RIAGENDR <dbl> 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1…
$ RIDAGEYR <dbl> 43, 66, 44, 5, 2, 3, 43, 65, 34, 68, 27, 59, 31, 33, 74, 39, …
$ RIDAGEMN <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ RIDRETH1 <dbl> 5, 3, 2, 5, 3, 2, 1, 3, 1, 3, 4, 3, 3, 3, 3, 3, 3, 5, 3, 3, 1…
$ RIDRETH3 <dbl> 6, 3, 2, 7, 3, 2, 1, 3, 1, 3, 4, 3, 3, 3, 3, 3, 3, 7, 3, 3, 1…
$ RIDEXMON <dbl> 2, 2, 1, 1, 2, NA, NA, NA, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1…
$ RIDEXAGM <dbl> NA, NA, NA, 71, 34, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ DMQMILIZ <dbl> 2, 2, 2, NA, NA, NA, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2…
$ DMDBORN4 <dbl> 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2…
$ DMDYRUSR <dbl> 6, NA, 6, NA, NA, NA, 5, NA, NA, NA, NA, 6, NA, NA, NA, NA, N…
$ DMDEDUC2 <dbl> 5, 5, 3, NA, NA, NA, 2, 3, 4, 5, 4, 5, 3, 3, 5, 5, 5, 3, 4, 3…
$ DMDMARTZ <dbl> 1, 1, 1, NA, NA, NA, 3, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1…
$ RIDEXPRG <dbl> NA, NA, 2, NA, NA, NA, NA, NA, NA, NA, 2, NA, 2, 2, NA, NA, N…
$ DMDHHSIZ <dbl> 4, 2, 7, 2, 4, 3, 2, 2, 3, 1, 5, 2, 5, 3, 2, 3, 4, 1, 2, 2, 2…
$ DMDHRGND <dbl> NA, NA, NA, 2, 2, 2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
$ DMDHRAGZ <dbl> NA, NA, NA, 2, 2, 2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
$ DMDHREDZ <dbl> NA, NA, NA, 2, 3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ DMDHRMAZ <dbl> NA, NA, NA, 3, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
$ DMDHSEDZ <dbl> NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ WTINT2YR <dbl> 50055.45, 29087.45, 80062.67, 38807.27, 30607.52, 43456.14, 1…
$ WTMEC2YR <dbl> 54374.46, 34084.72, 81196.28, 55698.61, 36434.15, 0.00, 0.00,…
$ SDMVSTRA <dbl> 173, 173, 174, 182, 182, 176, 179, 187, 179, 181, 187, 174, 1…
$ SDMVPSU  <dbl> 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, 2, 1…
$ INDFMPIR <dbl> 5.00, 5.00, 1.41, 1.53, 3.60, NA, 0.63, 5.00, 1.33, 1.32, 0.8…
result <- dpq_data |>
  mutate(
    new_col = rowSums(pick(DPQ010:DPQ100), na.rm = TRUE)
  ) |>
  left_join(
    dpq_data_demo |> select(SEQN, RIDAGEYR, RIAGENDR, DMDEDUC2, DMDHHSIZ, INDFMPIR),
    by = "SEQN"
  ) |>
  glimpse()
Rows: 6,337
Columns: 17
$ SEQN     <dbl> 130378, 130379, 130380, 130386, 130387, 130388, 130389, 13039…
$ DPQ010   <dbl> NA, 0, 0, 0, 0, NA, 0, NA, 3, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, N…
$ DPQ020   <dbl> NA, 0, 0, 0, 0, NA, 0, NA, 3, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, N…
$ DPQ030   <dbl> NA, 1, 1, 0, 0, NA, 0, NA, 3, 0, 0, 0, 2, 1, 1, 0, 0, 0, 2, N…
$ DPQ040   <dbl> NA, 0, 1, 0, 0, NA, 0, NA, 3, 1, 1, 0, 3, 1, 1, 0, 1, 0, 1, N…
$ DPQ050   <dbl> NA, 0, 0, 0, 0, NA, 0, NA, 3, 0, 1, 0, 3, 1, 3, 0, 0, 1, 0, N…
$ DPQ060   <dbl> NA, 0, 0, 1, 0, NA, 0, NA, 3, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, N…
$ DPQ070   <dbl> NA, 0, 0, 0, 0, NA, 0, NA, 3, 0, 0, 0, 2, 1, 0, 0, 0, 1, 0, N…
$ DPQ080   <dbl> NA, 0, 0, 0, 0, NA, 0, NA, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, N…
$ DPQ090   <dbl> NA, 0, 0, 0, 0, NA, 0, NA, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, N…
$ DPQ100   <dbl> NA, 0, 0, 0, NA, NA, NA, NA, 2, 0, 0, NA, 0, 1, 0, NA, 0, 0, …
$ new_col  <dbl> 0, 1, 2, 1, 0, 0, 0, 0, 26, 1, 2, 0, 14, 8, 8, 0, 1, 2, 9, 0,…
$ RIDAGEYR <dbl> 43, 66, 44, 34, 68, 27, 59, 31, 33, 74, 39, 51, 33, 56, 67, 4…
$ RIAGENDR <dbl> 1, 1, 2, 1, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2…
$ DMDEDUC2 <dbl> 5, 5, 3, 4, 5, 4, 5, 3, 3, 5, 5, 5, 3, 4, 3, 3, 5, 3, NA, 5, …
$ DMDHHSIZ <dbl> 4, 2, 7, 3, 1, 5, 2, 5, 3, 2, 3, 4, 1, 2, 2, 2, 2, 3, 5, 2, 1…
$ INDFMPIR <dbl> 5.00, 5.00, 1.41, 1.33, 1.32, 0.81, 5.00, 2.16, 0.93, 3.04, 5…