R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

df = read.csv2("D:\\TAM DAN NON-ORTHO\\11. Non Ortho_ORAL HEATHY SURVEY FORM\\11.1 Teeth condition\\11.1 Teeth Condition.csv")
library(lessR)
## Warning: package 'lessR' was built under R version 4.5.2
## 
## lessR 4.5                            feedback: gerbing@pdx.edu 
## --------------------------------------------------------------
## > d <- Read("")  Read data file, many formats available, e.g., Excel
##   d is the default data frame, data= in analysis routines optional
## 
## Many examples of reading, writing, and manipulating data, graphics,
## testing means and proportions, regression, factor analysis,
## customization, forecasting, and aggregation to pivot tables.
##   Enter: browseVignettes("lessR")
## 
## View lessR updates, now including modern time series forecasting
##   and many, new Plotly interactive visualizations output. Most
##   visualization functions are now reorganized to three functions:
##      Chart(): type="bar", "pie", "radar", "bubble", "treemap", "icicle"
##      X(): type="histogram", "density", "vbs" and more
##      XY(): type="scatter" for a scatterplot, or "contour", "smooth"
##    Most previous function calls still work, such as:
##      BarChart(), Histogram, and Plot().
##   Enter: news(package="lessR"), or ?Chart, ?X, or ?XY
## There is also Flows() for Sankey flow diagrams, see ?Flows
## 
## Interactive data analysis for constructing visualizations.
##   Enter: interact()
library(labelled)
## Warning: package 'labelled' was built under R version 4.5.3
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:lessR':
## 
##     order_by, recode, rename
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(writexl)
## Warning: package 'writexl' was built under R version 4.5.3
# 1. MÃ HÓA TÌNH TRẠNG RĂNG (TEETH CONDITION) CHO 160 BIẾN
df <- df %>%
  mutate(
    # Loại trừ biến STT, ID và áp dụng mã hóa cho TẤT CẢ các cột còn lại
    across(
      -c(STT, ID),
      ~ factor(., 
               # Tôi giữ thêm mức 0 = Normal từ code cũ của bạn để phòng hờ trường hợp răng khỏe mạnh
               levels = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), 
               labels = c("Normal", 
                          "Tooth decay", 
                          "Filled, with decay", 
                          "Filled, no decay", 
                          "Missing due to decay", 
                          "Missing for another reason", 
                          "Fissure sealant", 
                          "Fix dental prosthesis/crown, abutment, veneer", 
                          "Unerupted", 
                          "Not recorded"))
    )
  )

# 2. GẮN NHÃN MÔ TẢ (LABELS) HOÀN TOÀN TỰ ĐỘNG CHO 160 BỀ MẶT RĂNG
# Bước 2.1: Lấy danh sách tên tất cả các biến bề mặt răng (trừ STT và ID)
surface_vars <- setdiff(names(df), c("STT", "ID"))

# Bước 2.2: Tự động dịch các hậu tố thành tên mặt răng chuẩn
nhan_surface <- surface_vars %>%
  # Biểu thức chính quy [u|i] giúp bắt cả chữ Occlusal đúng và chữ Occlisal bị gõ sai trong file
  gsub("_Occl[u|i]sal_Incisal", " Occlusal/Incisal Surface", .) %>% 
  gsub("_Buccal", " Buccal Surface", .) %>%
  gsub("_Lingua", " Lingual Surface", .) %>% # Bắt cả trường hợp gõ thiếu chữ 'l'
  gsub("_Mesia", " Mesial Surface", .) %>%   # Bắt cả trường hợp gõ thiếu chữ 'l'
  gsub("_Distal", " Distal Surface", .) %>%
  paste("Tooth", .) # Thêm chữ "Tooth" vào phía trước

# Bước 2.3: Gán danh sách nhãn vừa tạo vào bảng df
names(nhan_surface) <- surface_vars
var_label(df) <- as.list(nhan_surface)
# Tạo một bảng copy tạm thời để đổi tên tiêu đề
df_export <- df %>%
  # Lệnh này biến toàn bộ các "Nhãn dài" thành tên cột thực sự
  setNames(var_label(., unlist = TRUE))

# Sau đó xuất cái bảng tạm này ra Excel
write_xlsx(df_export, "D:\\TAM DAN - NON ORTHO (NEW)\\11.1\\11.1 Teeth Condition.xlsx")