Home > Blockchain >  Changing Column Names Based on a Different Dataframe
Changing Column Names Based on a Different Dataframe

Time:01-05

I have a data dictionary called data_dict of this format with hundreds of rows:

Field Name Field Label
marital_status What is your marital status?
birthplace What country were you born?

I have another dataframe called df in this format with hundreds of rows:

record_id marital_status birthplace
1 3 66
2 6 12

I am currently using df %>% map(~ table(.x, useNA = "ifany")) to summarize the results for all the columns in df. I want the Field Label column values from data_dict to appear instead of the column names from df. How could that be done without changing the column names in df?

CodePudding user response:

We may use rename

library(dplyr)
library(tibble)
 df %>% 
  summarise(across(all_of(data_dict$"Field Name"),
     ~ list(table(.x, useNA = "ifany")))) %>%
 rename(!!! deframe(data_dict[2:1]))

Or using map

library(purrr)
 df %>%
   rename(!!! deframe(data_dict[2:1])) %>%
   map(~ table(.x, useNA = "ifany")) 

-output

$record_id
.x
1 2 
1 1 

$`What is your marital status?`
.x
3 6 
1 1 

$`What country were you born?`
.x
12 66 
 1  1 

data

df <- structure(list(record_id = 1:2, marital_status = c(3L, 6L), birthplace = c(66L, 
12L)), class = "data.frame", row.names = c(NA, -2L))

data_dict <- structure(list(`Field Name` = c("marital_status", "birthplace"
), `Field Label` = c("What is your marital status?", "What country were you born?"
)), class = "data.frame", row.names = c(NA, -2L))
  •  Tags:  
  • r
  • Related