-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelper_functions_simple.R
3052 lines (2421 loc) · 85.9 KB
/
helper_functions_simple.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# packages used
# pacman::p_load(data.table, magrittr, dplyr, glue, stringr)
################################################################################
# Section 0: functions to use in the set up section ###########################
################################################################################
save_global_env <- function(directory="/home/tresende/Global_Political_Connections/general_purpose/code/global_env/"){
global_env_save <- get_timestamp() %>%
substr(start = 1, stop = 11) %>%
str_remove_all(., pattern = "-") %>%
paste0("global_env",., ".RData") %>%
paste0(directory, .)
save.image(file=global_env_save)}
################################################################################
# VARIABLE MANIPULATIONS --------
################################################################################
# Compute number of breaks between the max and min of a variables ----
create_breaks <- function(x) {
max_x <- max(x)
min_x <- min(x)
range_x <- max_x - min_x
upper_bound <- max_x + 0.1 * range_x
lower_bound <- min_x - 0.1 * range_x
breaks <- seq(floor(lower_bound), ceiling(upper_bound), length.out = 6)
return(breaks)
}
create_breaks_ranges <- function(x, units = 10) {
# x <-c(1, 2, 5, 20, 190, 404)*(-1)
max_x <- max(max(x), 0)
min_x <- min(min(x), 0)
diff <- max_x - min_x
if(min_x==0){
max_x <- floor((max_x + diff/10)/units)*units
}
if(max_x==0){
min_x <- ceiling((min_x - diff/10)/units)*units
}
range_x <- max_x - min_x
upper_bound <- max_x + 0.01 * range_x
lower_bound <- min_x - 0.01 * range_x
breaks <- seq(floor(lower_bound), ceiling(upper_bound), length.out = 6)
return(breaks)
}
# create breaks for ggplot (or any other reason ) ------
gg_create_breaks <- function(min, max, breaks, type = "regular"){
# min <- 0
# max <- 400
# breaks <- 12
if(type=="regular"){
by <- ceiling((max-min)/breaks)
out <- ceiling(seq(min, max+by, by))
}
if(type=="log-regular"){
log_max <- log(max)
log_min <- ifelse(is.numeric(log(min)),
ifelse(is.numeric(log(min + 0.001)), 0, log(min + 0.00001)) ,
log(min))
by <- ceiling((log_max-log_min)/breaks)
out <- ceiling(exp(seq(log_min, log_max+by, by)))
}
if(type=="log-log"){
log_max <- log(max)
log_min <- ifelse(is.numeric(log(min)),
ifelse(is.numeric(log(min + 0.001)), 0, log(min + 0.00001)) ,
log(min))
by <- ceiling((log_max-log_min)/breaks)
out <- seq(log_min, log_max+by, by)
}
if(type=="10-regular"){
max10 <- max*10
min10 <- min*10
by <- ceiling((max10-min10)/breaks)
out <- seq(min10, max10+by, by) / 10
}
out %>%
return()
}
# month to date -----
month_name_to_number <- function(month_name) {
#month_name <- xx
month_number <- c("January" = 1,
"February"= 2,
"March"= 3,
"April"= 4,
"May"= 5,
"June"= 6,
"July"= 7,
"August"= 8,
"September"= 9,
"October"= 10,
"November"= 11,
"December"= 12)
names(month_number) <- names(month_number) %>% str_to_lower()
month_number_dt <- month_number %>%
as.data.table(keep.rownames = T) %>%
rename_columns(current_names = c("rn", "."), c("month_lower", "number"))
month_vector_dt <- month_name %>%
as.data.table(keep.rownames = F) %>%
rename_columns(current_names = c("."), c("month")) %>%
.[, month_lower := str_to_lower(month)] %>%
generate_internal_order_column(. )
month_vector_dt %>%
merge(x = ., y= month_number_dt, by = "month_lower", all.x=T, all.y=F) %>%
.[order(INTERNAL_ORDER_COLUMN)] %>%
.[, number] %>%
return()
}
# clean date columns ------
clean_date_cols <- function(year, month, day){
# year <- tmp$heat_date_year
# month <- tmp$heat_date_month
# day <- tmp$heat_date_day
data.table(year = year, month = as.character(month), day = as.character(day)) %>%
.[(nchar(month)==1), month := paste0(0, month) ] %>%
.[(nchar(day)==1), day := paste0(0, day) ] %>%
.[, as.numeric(paste0(year, month, day))] %>%
return()
}
################################################################################
# file. and dir. funcitons ----
################################################################################
copy_files <- function(src_dir, dest_dir) {
# Get a list of all files in the source directory
files <- list.files(src_dir, full.names = TRUE
, recursive = T
)
# Iterate through each file and copy it to the destination directory
for (file in files) {
file.copy(file, dest_dir)
}
}
standardize_folder_and_file_names <- function(parent_folder){
#parent_folder <- "C:/Users/alckm/Dropbox/pdf_conversion/data/input/unzipped/20230118 - Copy/"
paste0("Standardizing folder and file names for documents under: ", parent_folder) %>%
message_with_lines()
setwd(parent_folder)
files <- list.files(path = parent_folder, include.dirs = T)
new_names <- files %>% stri_trans_tolower() %>%
stri_trans_general(., "Any-Latin") %>%
stri_trans_general(., "Latin-ASCII") %>%
str_replace_all(., " ", "_") %>%
str_replace_all(., "-", "_")
for(i in 1:length(files)){
paste0("Renaming ", files[i] , " to ", new_names[i]) %>%
message_with_lines()
file.rename(from = files[i], to = new_names[i])
Sys.sleep(0.1)
}
}
#parent_folder <- "C:/Users/alckm/Dropbox/pdf_conversion/data/input/unzipped/20230118_-_copy"
standardize_folder_and_file_names_one_level_deeper <- function(parent_folder){
standardize_folder_and_file_names(parent_folder)
folders <- list.dirs(parent_folder, full.names = T)
for(FOLDER in folders){
paste0("Standardizing files in : ", FOLDER)
standardize_folder_and_file_names(FOLDER)
}
}
# cumulative max for vector ------
cummax <- function(x) {
max_so_far <- x[1]
cummax_vec <- numeric(length(x))
for (i in 1:length(x)) {
max_so_far <- max(max_so_far, x[i])
cummax_vec[i] <- max_so_far
}
return(cummax_vec)
}
# second cumulative max for vector ------
second_cummax <- function(x){
second_cummax_vec <- numeric(length(x))
if(length(x)>1){
for (i in 2:length(x)) {
vec_so_far <- x[1:i]
max_so_far <- max(vec_so_far)
index_for_max <- which(vec_so_far==max_so_far)[1]
vec_so_far[index_for_max] <- 0
second_max <- max(vec_so_far)
second_cummax_vec[i] <- second_max
}
}
return(second_cummax_vec)
}
# running sum of top two numbers ------
cumsum_top2 <- function(x) {
# x <- c(1, 5, 1, 3, 6, 3, 1, 8, 9, 2)
cx <- cummax(x)
cx2 <- second_cummax(x)
running_total <- cx + cx2
return(running_total)
}
################################################################################
# Section 1: mathematical helper functions #####################################
################################################################################
# Section 1.1: is greater than ----
is_greater_than <- function(x, n){return(x>n)}
# Section 1.2: is greater than or equal to ----
is_greater_than_or_equal_to <- function(x, n){return(x>=n)}
# is greater than zero
is_greater_than_zero <- function(x){return(x>0)}
# Section 1.3: is x greater than zero ----
is_greater_than_zero <- function(x) {
out <- (x > 0) * 1
return(out)
}
# Section 1.4: missing as zero ----
na_as_zero <- function(x){
if(is.na(x)){
return(0)
}else{return(x)}
}
# Section 1.5: create x 0s according to vector specification ----
n_zeroes <- function(vec){
out <- as.character(vec)
for(i in 1:length(vec)){
v <- vec[i]
if((v==0)|is.na(v)){
if(is.na(v)){
out[i] <- ""
}else{
out[i] <- ""
}
out[i] <- ""
}else{
out[i] <- v %>% rep("0", .) %>% glue::glue_collapse(x=.)
}
}
out[is.na(vec)] <- NA
return(out)
}
# Section 1.6: format commas ----
format_with_commas <- function(x) {
if(is.numeric(x)){
if(does_numeric_have_decimal(x)){
message_with_lines("Rounding the numeric value for formatting purposes.")
}
}
# Convert the input to a character string
x <- as.character(as.integer(round(x, digits = 0)))
# Use gsub to add a comma after every three digits, starting from the right
x <- gsub("(\\d)(?=(\\d{3})+$)", "\\1,", x, perl = TRUE)
# Return the formatted string
return(x)
}
# multply things in line when piping
inline_sum <- function(a, b){
return(a+b)
}
inline_sub <- function(a, b){
return(a-b)
}
inline_mult <- function(a, b){
return(a*b)
}
inline_div <- function(num, denom){
return(num/denom)
}
# does the numeric value have a decimal? -----
does_numeric_have_decimal <- function(x) {
if(is.numeric(x)) {
test <- (x != round(x)) %>% .[!is.na(.)]
if(any(test)) {
return(TRUE)
} else {
return(FALSE)
}
} else {
return(FALSE)
}
}
# function to standardize a vector into the std normal distribution -----
standard_normalize <- function(vector){
vector_is_homogenous <- (length(vector)<=1)|(length(unique(vector))==1)
if(vector_is_homogenous){
out <- c(0)
}else{
out <- (vector-mean(vector, na.rm=T))/(sd(vector, na.rm=T))
}
return(out)
}
################################################################################
# Section 2: column names ######################################################
################################################################################
# Section 2.1: get new names between old and new data.table ------
get_new_column_names <- function(old_datatable,
new_datatable){
# get original names
old_names <- names(old_datatable)
# get dummy names from owners
new_additional_names <-
names(new_datatable) %>%
.[!(. %in% old_names)]
return(new_additional_names)
}
# Section 2.2: function to rename vector of variables from data.table ----
rename_columns <- function(datatable, current_names, new_names){
# get all names
all_names <- names(datatable)
# find variables to not change
do_not_change <- all_names %>% .[!(. %in% current_names)]
# check if names that won't be changed intersect with new names
if(sum(new_names %in% do_not_change)==1){
# get the variables that already exist
variables_that_already_exist <- new_names %>% .[. %in% do_not_change] %>% glue::glue_collapse(sep = ", ")
warning_message <- paste0("At least one elelment of new_name vector already exists as a variable which will not be renamed.",
" The funciton will return the original data-table instead!!",
" The variables in question are: ",
variables_that_already_exist)
warning(warning_message)
return(datatable)
}else{
# separate variables to change and not change
data_do_not_change <- datatable %>% copy() %>% .[, ..do_not_change]
data_change <- datatable %>% copy() %>% .[, ..current_names]
# change variables we wish to rename
names(data_change) <- new_names
# join data back together (tho perhaps in different order)
out <- cbind(data_do_not_change, data_change)
return(out)
}
}
# get vairable name that matches a suffix ----
get_variable_name_with_suffix <- function(datatable, suffix){
# delete later
# datatable <- surname_fyi
# suffix <- local_origin_num
# ---
column_name <- names(datatable) %>%
.[endsWith(x = ., suffix = as.character(suffix))] %>%
c(.)
return(column_name)
}
# cleans text ------------
clean_text_revolvingdoor <- function(x){
x %>%
# clean up firm names by making upper case
enc2utf8() %>%
toupper() %>%
# removing punctuation
gsub(pattern = "[[:punct:]]", replacement = " ", x = .) %>%
# removing double spaces
gsub(pattern = "\\s+", replacement = " ", x = .) %>%
# removing leading/trailing spacess
stri_trim_both(.) %>%
return()
}
# clean numerical suffix to avoid matching confusion ----
clean_numerical_suffix <- function(variables){ #clean_numerical_suffix
# delete later
# variables <- c("fy_indicator_alo_education_max_2",
# "fy_indicator_alo_education_max_20",
# "fy_indicator_alo_education_max_NF",
# "fy_indicator_alo_education_max_0",
# "fy_indicator_alo_education_max_",
# "fy_indicator_alo_education_max_987",
# "fy_indicator_alo_education_max_peter")
# copy original variables
variables_original <- copy(variables)
# get digit suffixes
digit_suffixes <- variables_original %>% get_digits_after_last_underscore(.)
# identify which ones are not digits
suffix_is_not_digit <- is.na(digit_suffixes)
# get variable roots
roots <- remove_suffix_from_variables(
variables = variables,
suffixes = digit_suffixes)
# number of digits in each suffix
digit_suffixes_nchar <- digit_suffixes %>% nchar()
# max number of digits in all suffixes
digit_suffixes_nchar_max <- 3 #digit_suffixes_nchar %>% max(., na.rm=T)
# difference between max and actual
diff <- (digit_suffixes_nchar_max - digit_suffixes_nchar)
# get the number of zeros to add to suffix
zeros_to_add <- n_zeroes(diff)
# paste the appropriate amount of zeros to the digits
new_suffix <- paste0(zeros_to_add, digit_suffixes) #%>%
# if the suffix digit is missing/suffix is a string, then it appears as "NANA"; so drop it
#str_remove_all(., "NANA")
# get the new full variable names
renamed <- paste0(roots, new_suffix)
# varables with no digit suffix are returned as the original names
renamed[suffix_is_not_digit] <- variables_original[suffix_is_not_digit]
out <- copy(renamed)
return(out)
}
# drop duplicates across whole dt ----------
drop_duplicates <- function(dt, by=NULL){
if(is.null(by)){
by <- dt %>% names()
}
dt %>%
.[, .GRP, by] %>%
.[!duplicated(GRP)] %>%
.[, GRP := NULL] %>%
return()
}
# order these first (USED TO BE order_these_first) -----
reorder_columns <- function(vector, first){
vector %>%
append(first, .) %>%
.[!duplicated(.)] %>%
return()
}
# remove suffix from variables ----
remove_suffix_from_variables <- function(variables, suffixes){
variables_nchar <- nchar(variables)
suffixes_nchar <- nchar(suffixes) %>% lapply(., na_as_zero) %>% unlist
diff_nchar <- variables_nchar - suffixes_nchar
roots <- variables
for(i in 1:length(variables)){
roots[i] <- substring(variables[i], 1, last = diff_nchar[i])
}
return(roots)
}
################################################################################
# Section 3: String operations #################################################
################################################################################
# is.na for strings
is_empty_string <- function(x){
return(ifelse(x=="", TRUE, FALSE))
}
# Section 3.0: examples of names that need cleaning -----
str_create_name_column <- function(dataset="CIA-CHIEFS"){
data_set_options <- c("CIA-CHIEFS")
if(is.null(dataset)){
message("The names here are sourced from actual data-sets. Available data-set options are: ")
message(glue::glue_collapse(data_set_options, sep = ", "))
}
if(dataset=="CIA-CHIEFS"){
c(
"Prifti, Dritan",
"Baymyrat HOJAMUHAMMEDOW"
,
"Francoise ASSOGBA",
"Sarbu, Marian"
,
"Jennifer WESTFORD, Doctor",
"Hierro, Luis"
,
"Ahmed Mohamed Mohamed AL-KAROURI",
"Raja Pervaiz ASHRAF"
,
"Bedouma Alain YODA",
"Vasyl HRYTSAK"
,
"Abdul Hadi ARGHANDIWAL",
"Toprak, Erdogan"
,
"Jose Carlos Lopes CORREIA",
"Sheikh Hassan Ismail BILE"
,
"MENG Jianzhu",
"Metogho, Emmanuel Ondo"
,
"Ivan ZAMBRANO",
"Tatoul MARKARIAN"
,
"Mariano Gago, Jose",
"Maumoon Abdul GAYOOM"
,
"Sabine LARUELLE",
"Denis SASSOU-Nguesso"
,
"Jeffrey, Henry, Doctor",
"Abdoulaye BALDE"
,
"Sergey MASKEVICH",
"Masahiko KOMURA"
,
"Tsedevdamba OYUNGEREL",
"Tokon MAMYTOV"
,
"MOHAMMAD bin Abd Rahman",
"Evode UWIZEYIMANA"
,
"Maria KIWANUKA",
"Selma Aliye KAVAF"
,
"Djombo, Henri",
"Petre TSISKARISHVILI"
,
"Gilles NOGHES",
"Adechi, Joel"
,
"Clayton BURGIN",
"Mikhail KHVOSTOV"
,
"Abdiweli Ibrahim Sheikh MUUDEEY",
"M. Veerappa MOILY"
,
"Ngandagina, Joao Baptista",
"Babanyyaz ITALMAZOW"
,
"Adil SAFIR",
"Andrea LEADSOM"
,
"Tabare Ramon VAZQUEZ Rosas",
"Peri Vaevae PARE"
,
"Milosavljevic, Slobodan",
"Besir ATALAY"
,
"Naomi Mataafa FIAME",
"SUWIT Yotmanee"
,
"Shuala, Abd al-Nabi al-",
"Reginald AUSTRIE"
,
"Elyse RATSIRAKA",
"Janez PODOBNIK"
,
"Henry PUNA",
"Khatib, Mohammed Seif"
,
"Gudmundur Arni STEFANSSON",
"Obaid Humaid al-TAYER"
,
"YOO Young-sook",
"Aananda Prasad POKHERAL"
,
"Timothy TONG Hin-ming",
"Janis MAZEIKS"
,
"Fernando \"\"Lasama\"\" de ARAUJO",
"Thomas Motsoahae THABANE"
,
"Lee, Howard Chin",
"Christian NOYER"
,
"Ramiro VALDES Menendez",
"Guillermo RISHCHYNSKI"
,
"Abd al-Wahid al-AWADI",
"Qaranful, Sami"
,
"Mahen JHUGROO",
"Ruslan KAZAKBAEV"
,
"Daniel SCIOLI",
"Iuga, Mircea"
,
"KYAW SAN, Colonel",
"Georgette KOKO"
,
"Adoum GARGOUM",
"Adao do NASCIMENTO"
,
"Deborah Mae LOVELL",
"Muhammad bin Abd al-Malik AL AL-SHAYKH"
,
"Julio VELARDE",
"Yuli EDELSTEIN"
,
"Anna BIJLEVELD",
"Banoita Tourab SALEH, Doctor"
,
"Aiyaz SAYED-KHAIYUM",
"Asia Muhammad Ali IDRISS"
,
"Paulo Sergio PASSOS",
"RYU Mi Yong"
,
"Lohani, Prakash Chandra",
"ALI MUHSIN al-Ahmar, Lieutenant General"
,
"Kamana, Jean",
"LETSIE III"
,
"Petr PROKOPOVICH",
"Paul SWAIN"
,
"HU Jintao",
"Bogdan KLICH"
,
"Lygia KRAAG-KETELDIJK",
"Mahesh BASNET"
,
"NUT NINDOEUN (F)",
"Karl-Heinz GRASSER"
,
"Amadou Boubacar CISSE",
"Truong My HOA"
,
"Siniora, Fuad",
"JUNEDIN Sado"
,
"De Mauro, Tullio",
"Philippe RICHERT"
,
"Sam IDURI",
"Kanda SIPTEY"
,
"Eyegue Obama Asue, Francisco Pascual",
"El Fassi, Abbas"
,
"OH Myung",
"Alfheidur INGADOTTIR"
,
"Waena, Nathaniel",
"Delano Frank BART"
,
"Geldymukhammed ASHIRMUKHAMEDOV",
"Jose Eduardo DOS SANTOS"
,
"Ilham ALIYEV",
"Fillon, Francois"
,
"Rasmussen, Lars Loekke",
"Steve BLACKETT"
,
"Carlos Alberto AMARANTE BARET",
"AHMAD bin Jumat, Doctor"
,
"Dewael, Patrick",
"Paride ANDREOLI"
,
"Henry KAJURA",
"Phiwayinkhosi MABUZA"
,
"SUN CHANTHOL",
"Homayoun RASA"
,
"Nkaku KABI",
"Rajoy, Mariano Brey"
,
"Danilo ASTORI Saragoza",
"Hassanein, Muhammad Medhat"
,
"Qarase, Laisenia",
"Mendez Pinelo, Cesar Augusto, Brigadier General"
,
"Qarase, Laisenia",
"PERNG Fai-nan"
,
"Anerood JUGNAUTH, Sir",
"KHALID bin Abdallah Al Khalifa"
,
"Yar Muhammad RIND",
"MSWATI III"
,
"TEA BANH, General",
"Sirojidin ASLOV"
,
"Jose Antonio GARCIA BELAUNo Diplomatic Exchange",
"NUTH SOKHOM"
,
"James BABA",
"Etienne SCHNEIDER"
,
"Muhsin BILAL, Doctor",
"Adriano MALEIANE"
,
"James MUSONI",
"Helgi AGUSTSSON",
'Afful, John Edward',
'Yasser REDA',
'Ersumer, Cumhur',
'Igwe AJA-NWACHUKWU',
'Ghoul, Omar',
'Saud NASEIRAT',
'Adou ASSOA',
'Benoit OUTTARA',
'Sultan, Sultan Hamid',
'PHAN PHIN (CPP)',
'Ilona JURSEVSKA',
'Polataivao, Fosi',
'Adnan BADRAN',
'SONG Soo-keun',
'Soccoh KABIA',
'Naot, Yehudit',
'Patrick Saidu CONTEH, Doctor',
'Rosalia CORTE-REAL',
'Mohammed LOULICHKI',
'TUNG Hsiang-lung',
'Yien TUT',
'Joe OLIVER',
'Ben Abdallah, Moncef',
'Zaha WAHEED',
'Philip BYARUHANGA',
'El Hossein EL OUARDI',
'Marto, Michel',
'Dupont, Christian',
'PHISIT Li-atham',
'Lubica LASSAKOVA',
'Frick, Mario',
'Ergash SHOISMATOV',
'Tomka, Peter',
'Essomba ETOUNDI',
'Musa, Hamid Majid',
'ABDALLAH bin Zayid al-Nuhayyan',
'Muci, Mustafa',
'CHALEUAN Yapaoher',
'Latifa AKHERBACH',
'Marian LUPU',
'Dsir ADADJA',
'Henry CHIMUNTHU-BANDA',
'Houssen Hassan IBRAHIM Minister, Ministry of Justice, Civil Service, Administrative, Administration Reform, Human Rights, &',
'Celestin NIYONGABO',
'Mujahid al-QAHALA',
'Nkongo, Maximin Paul N\'Koue', 'Muhammad Nidal al - SHA’AR', 'Ivan FOSCHI', 'Pelisge HARRISON', 'Nguyen Manh Kiem', 'Jean', 'Fahey,
John', 'Kuzvart,
Milos', 'Quliyev,
Vilayat', 'LIM Swee Say', 'Guillaume LONG', 'LIO Chao - hsuan', 'Alvarado Downing,
Guillermo', 'Lawan Gana BUBA', 'Guy Mikulu POMBO', 'Clarke,
Gline', 'Senaviratne,
Athauda', 'Mohamed EL OUAFA', 'Isch,
Edgar', 'Steve MAHAREY', 'Oleh PROSKURYAKOV', 'Aghvan VARDANYAN', 'Rosa Bautista,
Leonidas', 'Augusto DOS SANTOS', 'Maria de Fatima Monteiro JARodger Dodger !
IM', 'Luis Enrique MONTERROSO', 'Hubert OULAYE', 'Michael KEENAN', 'Latpov,
Ural', 'Anwar Muhammad al - GARGASH', 'Kazem VAZIRI - Hamaneh', 'Wellington SANDOVAL', 'Mangoaela,
Percy Metsing', 'Omar MANSOUR', 'Temirbek KURMANBEKOV', 'Hamlaoui,
Yahia', 'Saleem MANDVIWALLA', 'Hassan HARUNA', 'Hemida Ould Ahmed TALEB', 'Horacio SEVILLA Borja', 'PRASERT Boonchaisuk', 'Souley,
Hassane', 'Andre Ringui LE GAILLARodger Dodger ! ', 'Bahr Idris ABU GARodger Dodger !
A', 'Fouad Ali EL - HIMMA', 'Bessie Reen KACHERE', 'Jacques Ulrich RANDRIANTIANA', 'Djibril Yipene BASSOLE', 'John MUTORWA', 'Jovanovic,
Vladislav', 'Saud,
ABD AL - AZIZ bin Fahd bin Abd', 'Tokyo SEXWALE', 'Amina EL - GUINDI', 'Boubaker EL -
AKHZOURI', 'Rill,
Anton', 'Amos KIMUNYA', 'Imendia,
Francisco', 'Hamud Muhammad ABAD', 'Flores Facusse,
Carlos Roberto', 'Peter Paire O\'NEILL',
'Dias, Guilherme Gomes',
'Tonis LUKAS',
'Casali, Augusto',
'MAENG Hyung-kyu',
'Matteo FIORINI',
'Babamyrat TAGANOW',
'Webb, Maurine',
'Dayasritha TISSERA',
'Cristobal Menana ELA',
'Brasseur, Anne',
'Muhammetguly OGSHUKOV',
'Matuq, Abdallah al-',
'Godfridah Nsenduluka SUMAILI',
'Mountaga TALL',
'Yondo, Maurice',
'Levai, Katalin',
'Serra, Joao',
'Bornito De Sousa Baltazar DIOGO',
'Ravil SAFIULLIN',
'Satya Veyash FAUGOO',
'Svetozar MAROVIC',
'Ancil ANTOINE',
'Abdi Ibrahim Absieh',
'Karamatov, Hamidulla',
'Imbert, Colm',
'CHAN NYEIN',
'Nancy BAKIR',
'Alvear Valenzuela, Maria Soledad',
'Patricia GORodger Dodger!ON-PAMPLIN',
'MONGKHON Na Songkhla, Doctor',
'Georgios BABINIOTIS',
'Mendes, Luis Olundo',
'David HARUTYUNYAN',
'Milutinovic, Milan',
'Maris KUCINSKIS',
'Nabil Mohamed AHMED, Doctor',
'Krishna Bahadur MAHARA',
'Capoulas Santos, Luis Manuel',
'Ibrahim al-JAZI',
'Pecek, Zeljko',
'Tshipasa, Venant',
'Octavio SANCHEZ',
'ABDUL RAHMAN bin Mohamed Taib',
'Wisdom, Neville',
'Abdullah al-THINI',
'Cidalia CHAUQUE',
'Cheikh Bamba DIEYE',
'Snjezana SOLDAT',
'Dona Jean-Claude HOUSSOU',
'Jorge Alberto MOLINA Contreras',
'Mohamed Ould Mohamed Abderrahmane Ould MOINE',
'Te Ururoa FLAVELL',
'Maggie BARRY',
'Rakam CHEMJONG',
'Amr EZZAT SALAMA',
'Stepan KUBIV',
'Ichinkhorloo ERDENEBAATAR',
'Oscar MARTINEZ Doldan',
'Salehuddin AHMED',
'Lina Dolores POHL Alfaro',
'Gabriel Mosima “Tokyo” SEXWALE',
'Babatune OSOTIMEHIN',
'Nacer MEHAL',
'Christopher Kajoro CHIZA',
'Jose Luis CANCELA',
'Khushiram, Khushhal',
'Kimmo TILLIKAINEN',
'Spartak SEYRANIAN',
'Son Chong-ho',
'Weerawanni, Samaraweera',
'Jagmohan',
'Ronell GILES',
'Adama BICTOGO',
'Marino MURILLO Jorge',
'Hamadou MUSTAPHA',
'Eliseo RIO, Jr.',
'Malan, Pedro',
'Magtymguly BAYRAMDURDYYEW',
'Lang, Jack',