Translate Column Names back and forth

在处理中文数据中,第一步就是翻译列名到英语。当我们分析完数据后,可能还需要将结果与之前的中文列名对应回去,这样比较麻烦。今天来总结一个小技巧。

# loading package
library(zetaEDA)

# raw data
dat <- tibble(姓名 = c("张三", "李四"), 年龄 = c(20, 30))

# check
dat %>% 
  print_kbl()
姓名 年龄
张三 20
李四 30

首先,建立一个数据集储存中英文对照表。

# build a column name translation data set
column_names_translation <- tibble(
  "姓名" = "name",
  "年龄" = "age"
) %>% 
  pivot_longer(1:2, names_to = "chinese", values_to = "english") 
  
# check
column_names_translation %>% 
  print_kbl()
chinese english
姓名 name
年龄 age

接下来就是trick啦:

  1. using deframe(), make a named vector

  2. using rename(!!! your_variable)

# translate to English
tmp <- column_names_translation %>% 
  select(english, chinese) %>% 
  deframe()

tmp
##   name    age 
## "姓名" "年龄"
# `!!!` in rename is important
dat %>% 
  rename(!!!tmp) %>% 
  print_kbl()
name age
张三 20
李四 30
# translate back to Chinese
tmp2 <- column_names_translation %>% 
  select(chinese, english) %>% 
  deframe()

dat %>% 
  rename(!!!tmp) %>% 
  rename(!!!tmp2) %>% 
  print_kbl()
姓名 年龄
张三 20
李四 30
Chen Xing
Chen Xing
Founder & Data Scientist

Enjoy Life & Enjoy Work!

Related