Predpokladajme, že v názvoch stĺpcov v pôvodnom súbore máme medzery,
teda
Tu sa v názvoch stĺpcov vyskytujú medzery. Názvy stĺpcov sa v prostredí R stávajú názvami premenných a tie nesmú byť súčasťou názvu premennej. Neprípustné znaky v názvoch premenných vo všeobecnosti môžeme nahradiť s pomocou knižnice janitor.
# install if not already
#install.packages("janitor")
udaje1 <- read.csv2("udaje/Dataset ESG and Firm Performance.csv")
library(janitor)
# Before
colnames(udaje1) # rovnako funguje aj colnames(udaje) - medzery su automaticky nahradene bodkami
[1] "YEARS" "COMPANIES" "EXCHANGE.SECTOR"
[4] "PRIMARY.BUSINESS" "TOBIN.Q" "MARKET.CAPITALIZATION"
[7] "RETURN.ON.ASSETS" "DEBT.TO.ASSET" "FIRM.SIZE"
[10] "SOCIAL.DISCLOSURE.INDEX" "ENVIRONMENTAL.DISCLOSURE.INDEX" "GOVERNANCE.DISCLOSURE.INDEX"
[13] "ESG.INDEX"
# Clean names
udaje1 <- clean_names(udaje1)
# After
colnames(udaje1) # bodky su nahradzovane standardnejsim vyjadrenim - znamienkom podtrhnutia
[1] "years" "companies" "exchange_sector"
[4] "primary_business" "tobin_q" "market_capitalization"
[7] "return_on_assets" "debt_to_asset" "firm_size"
[10] "social_disclosure_index" "environmental_disclosure_index" "governance_disclosure_index"
[13] "esg_index"
# dlhe nazvy vieme skratit prikazmi z kniznice dplyr
# je tu mozne robit mnoho dalsich uprav v nazvoch premennych
# m y t o n e b u d e m e p o u z i v a t
library(dplyr)
udajedplyr <- udaje1 %>%
rename_with(~ abbreviate(.x, strict = FALSE)) # e.g., "return_on_assets" -> "ret_on_ass"
# ensure uniqueness just in case:
names(udajedplyr) <- make.unique(names(udaje1))
names(udajedplyr)
[1] "years" "companies" "exchange_sector"
[4] "primary_business" "tobin_q" "market_capitalization"
[7] "return_on_assets" "debt_to_asset" "firm_size"
[10] "social_disclosure_index" "environmental_disclosure_index" "governance_disclosure_index"
[13] "esg_index"
rm(udajedplyr)
rm(udaje1)
Odporúčam tu použiť knižnice VIM, Amelia, mice a iné. Pokiaľ máme databázu dostatočne nekonzistentnú a nevieme ju upraviť vynechaním niekoľkých riadkov / stĺpcov, potom odporúčame blog M. Fatih Tüzen: Handling Missing Data in R: A Comprehensive Guide, R bloggers.
Naša databáza s chýbajúcimi údajmi vyzerá asi nasledovne
library(mice)
library(VIM)
chybne_udaje <- read.csv2("udaje/ChybnaDatabaza.csv")
# pattern of missingness
md.pattern(chybne_udaje)
COMPANIES EXCHANGE.SECTOR PRIMARY.BUSINESS TOBIN.Q MARKET.CAPITALIZATION RETURN.ON.ASSETS DEBT.TO.ASSET FIRM.SIZE
759 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
SOCIAL.DISCLOSURE.INDEX ENVIRONMENTAL.DISCLOSURE.INDEX GOVERNANCE.DISCLOSURE.INDEX ESG.INDEX YEARS
759 1 1 1 1 1 0
1 1 1 1 1 0 1
0 0 0 0 1 1
# visualize missing data
aggr(chybne_udaje, bars=FALSE,col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE) # cervena farba signalizuje chybahuce polozky
Variables sorted by number of missings:
# multiple imputation - v pripade, ak vam chyba mensi rozsah udajov
imp <- mice(chybne_udaje, seed=123) # konkretne parametre imputacie vieme nastavovat - pozri help
iter imp variable
1 1 YEARS
1 2 YEARS
1 3 YEARS
1 4 YEARS
1 5 YEARS
2 1 YEARS
2 2 YEARS
2 3 YEARS
2 4 YEARS
2 5 YEARS
3 1 YEARS
3 2 YEARS
3 3 YEARS
3 4 YEARS
3 5 YEARS
4 1 YEARS
4 2 YEARS
4 3 YEARS
4 4 YEARS
4 5 YEARS
5 1 YEARS
5 2 YEARS
5 3 YEARS
5 4 YEARS
5 5 YEARS
udaje_imputovane <- complete(imp, 1)
head(udaje_imputovane)
rm(imp)
rm(udaje_imputovane)