@@ -5,7 +5,12 @@ library(readr)
55library(usethis )
66library(BGmisc )
77
8-
8+ date_qualifier_regex <- " \\ b(?:A[BF]T|BE[TF])\\ b\\ s*"
9+ text_cleanup_regex <- c(
10+ " /|\\ (twin\\ )" = " " ,
11+ " _" = " " ,
12+ " \\ s*-\\ s*" = " -"
13+ )
914
1015# # Create dataframe
1116royal92 <- df_raw <- readGedcom(" data-raw/royal92.ged" )
@@ -16,40 +21,131 @@ royal92 <- ped2fam(royal92, personID = "personID") %>%
1621 - name_surn ,
1722 - FAMC ,
1823 - FAMS
19- ) %> %
24+ ) %> %
25+ addPersonToPed(
26+ personID = 1147 ,
27+ name = " Henry de Montfort" ,
28+ sex = " M" ,
29+ momID = 1370 ,
30+ dadID = 873 ,
31+ overwrite = TRUE
32+ ) %> % addPersonToPed(
33+ personID = 3011 ,
34+ name = " Simon de Montfort the Younger" ,
35+ sex = " M" ,
36+ momID = 1370 ,
37+ dadID = 873
38+ )
39+
40+
41+ royal92_cleaned <- royal92 %> %
2042 mutate(
2143 momID = as.numeric(momID ),
2244 dadID = as.numeric(dadID ),
23- name = str_remove(name , " /" ),
24- aproximated_dob = case_when(
25- str_detect(birth_date , " ABT|BET|AFT|BEF" ) == TRUE ~ TRUE ,
45+ approximated_dob = case_when(
46+ str_detect(birth_date , date_qualifier_regex ) ~ TRUE ,
2647 str_length(birth_date ) == 4 ~ TRUE ,
2748 TRUE ~ FALSE
2849 ),
29- aproximated_dod = case_when(
30- str_detect(death_date , " ABT|BET|AFT|BEF " ) == TRUE ~ TRUE ,
50+ approximated_dod = case_when(
51+ str_detect(death_date , date_qualifier_regex ) ~ TRUE ,
3152 str_length(death_date ) == 4 ~ TRUE ,
3253 TRUE ~ FALSE
3354 ),
34- birth_date = str_replace_all(birth_date , " ABT|BET|AFT|BEF" , " " ),
35- death_date = str_replace_all(death_date , " ABT|BET|AFT|BEF" , " " ),
55+ birth_date = str_replace_all(
56+ birth_date , date_qualifier_regex , " " ) %> %
57+ str_squish(),
58+ death_date = str_replace_all(
59+ death_date , date_qualifier_regex , " " ) %> %
60+ str_squish(),
61+ # if only year is given, assign 15th June as the date
3662 birth_date = case_when(
63+ personID == 1147 ~ " 15 NOV 1238" ,
64+ personID == 1149 ~ " 7 OCT 1816" ,
65+ personID == 2456 ~ " 15 JUN 1070" ,
66+ personID == 2985 ~ " 26 APR 1924" ,
67+ personID == 3011 ~ " 15 APR 1240" ,
3768 str_length(birth_date ) == 0 ~ NA_character_ ,
3869 str_length(birth_date ) == 4 ~ paste0(" 15 JUN " , birth_date ),
3970 TRUE ~ birth_date
40- ),
41- birth_date = as.Date(str_trim(birth_date ), format = " %d %b %Y" ),
71+ ) %> %
72+ str_trim() %> %
73+ as.Date(format = " %d %b %Y" ),
74+ # if only year is given, assign 15th June as the date
4275 death_date = case_when(
76+ personID == 1147 ~ " 4 AUG 1265" ,
77+ personID == 1149 ~ " 12 APR 1817" ,
78+ personID == 2456 ~ " 14 FEB 1117" ,
79+ personID == 2985 ~ " 14 DEC 1997" ,
80+ personID == 3011 ~ " 15 JUN 1271" ,
4381 str_length(death_date ) == 0 ~ NA_character_ ,
4482 str_length(death_date ) == 4 ~ paste0(" 15 JUN " , death_date ),
4583 TRUE ~ death_date
46- ),
47- death_date = as.Date(str_trim(death_date ), format = " %d %b %Y" ),
84+ ) %> %
85+ str_trim() %> %
86+ as.Date(format = " %d %b %Y" ),
4887 name = case_when(
88+ personID == 12 ~ " Alexandra of Denmark (Alix)" ,
89+ personID == 27 ~ " Victoria Eugenie (Ena)" ,
90+ personID == 39 ~ " Alexandra Fedorovna (Alix)" ,
91+ personID == 41 ~ " Dagmar (Marie) of Denmark" ,
92+ personID == 84 ~ " Elizabeth (Ella)" ,
93+ personID == 85 ~ " Mary (May)" ,
94+ personID == 136 ~ " Mary Adelaide (Fat Mary)" ,
95+ personID == 155 ~ " Michael (Mischa) Alexandrovich Romanov" ,
96+ personID == 785 ~ " Richard Curzon-Howe" ,
97+ personID == 788 ~ " James Hamilton" ,
98+ personID == 1197 ~ " Karl Theodor (Gackl)" ,
99+ personID == 1200 ~ " Sophie Charlotte Auguste" ,
100+ personID == 1442 ~ " Ferdinand Philippe Marie d'Orléans" ,
101+ personID == 1594 ~ " John IV (the Conqueror) of Montfort" ,
102+ personID == 1709 ~ " Henry Somerset" ,
103+ personID == 2851 ~ " Ernest Frederick III of Saxe-Hildburghausen" ,
49104 personID == 2944 ~ " William Scott of Buccleuch Montagu-Douglas" ,
50- TRUE ~ str_replace_all(name , " _" , " " )
51- )
105+ personID == 2990 ~ " William Legge" ,
106+ personID == 2991 ~ " Rupert Legge" ,
107+ personID == 2992 ~ " Charlotte Legge" ,
108+ personID == 2993 ~ " Henry Legge" ,
109+
110+ TRUE ~ name %> %
111+ str_replace_all(text_cleanup_regex ) %> %
112+ str_squish()
113+ ),
114+ twinID = case_when(
115+ personID == 223 ~ 222 ,
116+ personID == 222 ~ 223 ,
117+ personID == 1116 ~ 1117 ,
118+ personID == 1117 ~ 1116 ,
119+ personID == 1155 ~ 1156 ,
120+ personID == 1156 ~ 1155 ,
121+ TRUE ~ NA_real_
122+ ),
123+ attribute_title = attribute_title %> %
124+ str_replace_all(text_cleanup_regex ) %> %
125+ str_squish(),
126+ sex = case_when(
127+ personID %in% c(1098 ,
128+ 1753 ,
129+ 1755 ,
130+ 1756 ,
131+ 1803 ,
132+ 2033 ,
133+ 2509 ,
134+ 2990 ,
135+ 2991 ,
136+ 2993
137+ ) ~ " M" ,
138+ personID %in% c(1149 ,
139+ 2992
140+ ) ~ " F" ,
141+ TRUE ~ sex
52142 )
143+ )
144+
145+
146+
147+ royal92 <- royal92_cleaned %> %
148+ select(- approximated_dob , - approximated_dod )
53149# "22 AUG 1485"
54150# if missing momID or dadID, assign the next available ID
55151
@@ -68,7 +164,6 @@ checkis_acyclic <- checkPedigreeNetwork(royal92,
68164checkis_acyclic
69165if (checkis_acyclic $ is_acyclic ) {
70166 message(" The pedigree is acyclic." )
71-
72167 write_csv(royal92 , here(" data-raw" , " royal92.csv" ))
73168 usethis :: use_data(royal92 , overwrite = TRUE , compress = " xz" )
74169} else {
0 commit comments