Vignette: archChron, a Package for Handling Archaeological Chronologies and Chronological Data

Oliver Nakoinz

2026

Introduction

The archChron package provides functionality for handling archaeological chronological data. The package is based on the development of the Kiel Fortification Database (KFD). Please cite this package as Nakoinz (2025).

Archaeological chronologies (Bäbler (2004); Hansen (2001)) are the main result and the backbone of archaeological research. According to traditional methodology, including stratigraphy and typo-chronology, archaeological chronologies are fundamentally relative chronologies. These relative chronologies define certain phases and their relationships. Due to the heterogeneity of cultural processes and the individually, though related, development of different regions, many regional chronological systems exist.

The importance of scientific dating (sensu dating based on physical processes) is increasing, but these methods still cannot replace archaeological chronologies. Scientific dating rather complements native archaeological approaches and connects to and modifies existing archaeological chronologies.

However, although several attempts to switch to absolute chronologies only have been made, relative chronologies remain important and useful. We mention some reasons:

Publications from the 1970s with absolute dates only have to be translated carefully for comparison with recent publications with absolute dates, because the archaeological content might differ due to changing absolute dates.

Archaeological chronologies, as well as scientific dating, have to consider different kinds of uncertainty, such as precision. Since most archaeological chronologies do not include concepts of uncertainty beyond occasional fuzzy phase transitions, many dates are not comparable. This leads to inconsistent chronologies.

The approach of this package is based on the experience of projects (e.g. SHKR, Nakoinz (2013)) that explore different approaches to chronological references, the representation of archaeological dates, and the handling of uncertainty. These experiences have been used to develop a relatively simple and yet powerful approach to handling chronological data for the Kiel Fortification Database, started in 2015 (Nakoinz et al. (2017)), and currently used and maintained by the Subcluster Roots of Conflict: Competition and Conciliation in the DFG Cluster of Excellence ROOTS at Kiel University. We also have to mention the contributions by the E4 and the A2 projects of the DFG CRC 1266: “Scales of Transformation - Human-Environmental Interaction in Prehistoric and Archaic Societies”.

The requirements for an archaeological chronology concept are:

These requirements are hardly met by any usual solutions.

Methodological foundation

Before we can dive into the practical work with the archChron package, some methodological background needs to be discussed.

Definitions

point in time
A certain date without length or temporal extension, given on an interval time scale (note: interval scale, not time interval)
interval
A date with a certain duration, defined by a start and end with two different points in time
phase
An interval-like date with a certain duration that is provided on an ordinal scale. Phases are posets. A phase is defined by its content and the relative relation to other phases. The starting and end points might be unknown or can be mapped to an interval scale. Elements dated to one phase need not exist at the same time
time slice
A model that maps items within a certain interval to a point in time and assumes (hypothetically) that they exist at the same time. All kinds of analysis that somehow assume synchronicity of elements have to use time slices instead of phases
horizon
A time interval with a fixed start and an open end
set
A collection of elements that are not ordered. The extension of the set is the coverage of elements, while the intension of the set is the coverage of features
ordered set
A set with a well-defined relationship of all elements (order). Ordered sets can be used for flat relative chronology systems
partially ordered set (poset)
A set where some but not all relationships are well defined (= and >). Posets are used for sets of relative dates of objects, hierarchical chronology systems, and visualisation with Hasse diagrams (mathematical version of Harris matrix)

Scales

The starting point of our discussion is the seminal definition of scales by Stevens (1946):

scale operations example
nominal scale equal (\(=\)) types
ordinal scale + comparison (\(=,>\)) scores or relative phases
interval scale + difference (\(=,>,+,-\)) years
ratio scale + ratio (\(=,>,+,-,*,/\)) length

The main message of this concept is that each scale allows only specific mathematical operations. Please note that the “interval scale” and “time intervals” are completely different things, even if the word “interval” is used in both cases.

Let us now turn to chronological scales. We use some ASCII graphics to visualise different ideas. The first concept is points in time on interval scales.

            |
------------------------->

Interval dates on an ordinal scale are just ordered names of intervals

         xxxxxx
------------------------->

Interval dates on an interval scale are mathematical intervals.

         |----|
------------------------->

A particular issue with the different kinds of absolute chronologies is the “year 0”. In historical chronologies (Gregorian calendar or the Julian calendar), year 0 does not exist because historical dates use natural numbers on an ordinal scale. In fact, two scales of natural numbers (positive integers starting with 1), one for AD and one for BC, are used and merged. This kind of chronology is mathematically inconsistent! Please avoid using them in quantitative archaeology.

    |- y-2 -|
            |- y-1 -|
                    |- y1  -|
                            |- y2  -|
<---|-------+               +-------|-------|--->   ordinal scale with natural numbers
    -2      -1      0       1       2       3              

A consistent mathematical chronology has been developed in astronomy and is even used in ISO 8601. Here, one scale of integer numbers based on an interval scale of real numbers (continuous time scale) is used. Please note that, due to the fact that the end of the time interval is used to name the interval, the BC time seems to have a time lag.

    |- y-1 -|
            |- y0  -|
                    |- y1  -|
                            |- y2  -|
----|-------|-------+-------|-------|-------|--->    ordinal scale with integers
    -2     -1       0       1       2       3              

A very convenient approach that also uses an ordinal scale with integers is the point + interval notation. The intervals are named after the start of the interval and the duration. This approach can easily be generalised for interval scales.

    |-       -2+3          -|
                    |-     0+2     -|
                    |- 0+1 -|
                            |- 1+1 -|
----|-------|-------+-------|-------|-------|--->   ordinal scale with integers
    -2     -1       0       1       2       3              

We have to note that dating to a relative phase does not imply that the dated items exist at the same time.

Package archChron

The package aims for minimal dependencies, but some are required for specific functions. Nevertheless, the core functionality of this package does not require other packages.

The data flow graph (without a data sink) shows how the functions are connected concerning the data.

Changing the structure, the absolute dates, or even the archaeological content of a chronological system generates a new one. If only the archaeological content is changed, the description of the chronological system (laid down in the chronological description file) is the same apart from the system name, but the definition of transformations to other systems (laid down in a transformation matrix) can be different.

The package aims for minimal dependencies but some are required for specific functions. Non the less, the core functionality of this package does not require other packages.

Chronology metadata in chronsys

A chronological system is a coherent set of phases or defined time intervals that:

Changing the structure, the absolute dates, or even the archaeological content of a chronological system generates a new one. If only the archaeological content is changed, the description of the chronological system (laid down in the chronological description file) is the same apart from the system name, but the definition of transformations to other systems (laid down in a transformation matrix) can be different.

A chronology description file (usually a CSV file) can be written manually with any text editor or even with a spreadsheet programme such as LibreOffice Calc. Furthermore, some existing chronology description files can be downloaded from https://codeberg.org/OliverNakoinz/chronsys. The function chronsys_getChronsys() downloads files from this repository. The downloaded and loaded objects are dataframes that we will call chronref objects. They are a standardised description of a relative chronology system. The phases in a system are organised in a mono-hierarchical structure. Although this structure can be reconstructed from the chronology string (see below), the structure is also described with key numbers such as parent entities, hierarchy level, and order inside the level. The hierarchy allows the integration of different levels of imprecision.

chron_ref <- archChron::chronsys_getChronsys(
  csys   = c("fortME", "fortNE"),
  source = "codeberg",
  #path   = "../inst/"
  path    = here::here("inst")
)
head(chron_ref[[1]])
#>   c_system id p_id c_level
#> 1   fortNE  1    0       1
#> 2   fortNE  2    1       2
#> 3   fortNE  3    2       3
#> 4   fortNE  4    3       4
#> 5   fortNE  5    3       4
#> 6   fortNE  6    3       4
#>   c_order
#> 1       1
#> 2       1
#> 3       1
#> 4       1
#> 5       2
#> 6       3
#>                   chronstring
#> 1                 fortNE_Vorg
#> 2              fortNE_Vorg>BA
#> 3      fortNE_Vorg>BA>olderBA
#> 4 fortNE_Vorg>BA>olderBA>Per1
#> 5 fortNE_Vorg>BA>olderBA>Per2
#> 6 fortNE_Vorg>BA>olderBA>Per3
#>   name_short     name_long start
#> 1       Vorg Vorgeschichte -1800
#> 2         BA    Bronzezeit -1800
#> 3    olderBA               -1800
#> 4       Per1     Periode I -1800
#> 5       Per2    Periode II -1500
#> 6       Per3   Periode III -1300
#>     end start_error end_error
#> 1  1050           0         0
#> 2  -750           0         0
#> 3 -1100           0         0
#> 4 -1500           0         0
#> 5 -1300           0         0
#> 6 -1100           0         0
#>   description links comment
#> 1                NA      NA
#> 2                NA      NA
#> 3                NA      NA
#> 4                NA      NA
#> 5                NA      NA
#> 6                NA      NA

The columns of the chronology description files are:

As changes and corrections may occasionally be made to the chronsys files, it may be advisable to check the version.

archChron::chronsys_getVersion()
#> [1] "v2026.06.03"

Some example data from the KFD project are provided with the archChron package and are used as examples.

head(archChron::fort_main_sites)
#>   id_main
#> 1     168
#> 2    1123
#> 3    1146
#> 4    1164
#> 5    1235
#> 6    1412
#>                                   uuid
#> 1 30e24cb2-df31-11ea-89f8-f894c2a8d12b
#> 2 a18878d8-3152-11eb-bf63-80fa5b292ca1
#> 3 a1887b30-3152-11eb-bf63-80fa5b292ca1
#> 4 a1887cde-3152-11eb-bf63-80fa5b292ca1
#> 5 dc925568-0efe-11ec-8e45-d8cb8a6956d3
#> 6 9aee8c4a-0f0c-11ec-8e45-d8cb8a6956d3
#>   uuid_parents
#> 1         root
#> 2         root
#> 3         root
#> 4         root
#> 5         root
#> 6         root
#>                     name class
#> 1 Ringwall im Riesewohld  site
#> 2    Koblenz, Dommelberg  site
#> 3      Pommern, Martberg  site
#> 4   Burgen, Druidenstein  site
#> 5 Hunnenring / Otzhausen  site
#> 6   Altburg / Bundenbach  site
#>                                            type
#> 1                                  (dn111,23,3)
#> 2 (c132,33(c1,3))(c132,3(c1,3⊂(c132,32(c1,3))))
#> 3                     b1(b1((<d132,3)(d132,3)))
#> 4                                           bu1
#> 5                                 (cp134⊂dp134)
#> 6                            ((<bv134)(bv134>))
#>                                                                                                                        chron
#> 1                                                                                       fortNE_Vorg>IA>PRIA>PRIA2>PRIA2D_1.0
#> 2 fortME_Vorg>BA>SBA>HaA>HaA2_1.0, fortME_Vorg>BA>SBA>HaB>HaB1_1.0, fortME_Vorg>IA>Ha>HaD_1.0, fortME_Vorg>IA>Lt>Flt>LtA_1.0
#> 3                                                       fortME_Vorg>IA>Lt>LtD_1.0, fortME_Vorg>IA>Lt>Flt_0.5, fortME_Rom_1.0
#> 4                                                                          fortME_Vorg>BA>SBA_0.7, fortME_Vorg>IA>Ha>HaD_0.7
#> 5                                                    fortME_Vorg>IA>Lt>Flt>LtA_0.7,fortME_Vorg>IA>Lt>LtD_1.0, fortME_Rom_1.0
#> 6                                            fortME_Vorg>IA>Lt>Flt_1.0, fortME_Vorg>IA>Lt>LtC_1.0, fortME_Vorg>IA>Lt>LtD_1.0
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             comment
#> 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
#> 2 Halbringwälle um zwei benachbarte Kuppen am Steilhang zum Rhein. Die Nördliche Kuppe ist mit drei Halbkreiswällen umgeben, von denen der mittlere eine kleine Erweiterung nach N besitzt. Die südliche Kuppe ist mit einem Wall umgeben, der an den äußeren Wall der nördlichen Anlage Anschließt. Innerhalb dessen finden sich Grabenreste eines weiteren Walls und am Steilhang zwischen beiden Kuppen  ist eine wohl künstliche Stufe zu erkennen. Grabungen wurden von Bodewig 1898-1899 und von K. H. Wagner 1936-1937 durchgeführt und von Joachim 1977 publiziert. Die Anlage umfasst etwa 130000 qm und liegt gegenüber der Mündung der Lahn. Soweit ergraben scheint es sich um Pfostenschlitzmauern von 3-6 m Breite zu handeln. Es sind 2 Bauphasen festzustellen. Das Trockenmauerwerk ist stellenweise bis 1 m Höhe erhalten. Es wurde ein Tor untersucht, das zwei Fundamentgräben mit Pfostenlöchern aufweist. Die Torkammer ist 4 m breit und  5,4 m lang. Vor dem Tor befand sich eine Graben, vermutlich mit Brücke. Vermessung 1936 durch Hilden/Schuh. Funde: Keramik, 2 Spinnwirtelfragmente, Hütztenlehm, 2 Rollenkopnadeln (Br), Lanzenspitzenfragmente (Fe), Ringfragmente (Br), Tierknochen, vereinzelt Menschenknochen.
#> 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           Keltisches Oppidum, umfangreiche Ausgrabungen im 19., 20. und 21. Jh. .
#> 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Massiver Abschnittswall mit vorgelagertem Graben. 8-9 Fuß breite Trockenmauer. Oberflächenfunde der UK und HEK I, Grabung 1893
#> 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
#> 6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               source
#> 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           V. Arnold, Schleswig-Holstein neu entdeckt (Heide 2012).
#> 2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Bodewig 1900; Cohausen 1858; Hopstätter 1968; Joachim 1968; 1977; Jockenhövel 1974; Nortmann 1999, Nr. 9; Reichstein 1977; Schumacher 1916; 1917; Uslar 1953; 1964; Wagner 1937; v. Berg 2006; Wegner 1986
#> 3 A. v. Berg 1990; 2006; Eiden 1967; Gilles 1988; 1990; Wegner 1987; 1990; 1997;  A. Haffner, Der Mart- und Hüttenberg bei Pommern/Karden, ein Oppidum im östlichen Treverergebiet. In: A. Haffner, Trier, Augustusstadt der Treverer (Mainz 1984) 106–111. M. Thoma, Der gallorömische Tempelbezirk auf dem Martberg bei Pommern an der Mosel (Koblenz 2006). C. Nickel, Martin Thoma u. David Wigg-Wolf, Martberg: Heiligtum und Oppidum der Treverer. Berichte zur Archäologie an Mittelrhein und Mosel 14 (Koblenz 2008). J. Klein, Der Martberg bei Pommern an der Mosel und seine Kultstätte. Bonner Jahrb. 101, 1897, 62–116. C. Nickel, Die spätkeltisch-frührömische Siedlung im Oppidum auf dem Martberg (Lkr. Cochem-Zell, Rheinland-Pfalz). In: Martin Schönfelder, Susanne Sievers (Hrsg.), L’age du fer entre la Champagne et la Vallée du Rhin. – Die Eisenzeit zwischen Champagne und Rheintal. Verlag des Römisch-Germanischen Zentralmuseums (Mainz 2012) 291–336.
#> 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        v. Berg 1987, I, 299 f; II, 38 Nr. 46; Gilles 1985; Kapelle 1993, 92, 155; RheinZeitung 06.12.1956; RheinZeitung 22.11.1985
#> 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Schindler1968; Wiegert 2002
#> 6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Koch 1994
#>   location_q chron_q info_q
#> 1          3       3      3
#> 2          3       3      3
#> 3          3       3      3
#> 4          3       2      2
#> 5          2       2      3
#> 6          2       3      3
#>                                                          WKT
#> 1                                   POINT (514725.1 6000456)
#> 2                  POINT (399219.797194271 5575020.57982703)
#> 3                  POINT (377672.772359804 5559859.15401979)
#> 4                    POINT (384221.49504536 5561079.4090466)
#> 5  POINT (355699.83147819247096777 5498376.0141177186742425)
#> 6 POINT (384408.55165560246678069 5523033.77912799920886755)

Chronstrings

The chronsys metadata include a column called ‘chronstring’, which is the complete name of a certain phase. For usage in archaeological databases, this bare version of the chronstring is extended by including probabilities or membership values. This extended chronstring (simply chronstring or chronology string) is somehow the key component of the archChron system. A chronology string, for instance fortME_Vorg>BZ>MBZ>BzC_0.8, represents a relative date and comprises three parts, delimited by an underscore:

The general scheme is:

chronstring = chronsys_phase1>phase11>phase111_probability

The dating string concatenates the abbreviations of the different hierarchical levels of the phases, separated by “>”. The function chron_string_decompose() decomposes a chronology string into different elements, which are placed in a list.

cstring <- "fortME_Vorg>BZ>SBZ>HaA>HaA2_0.8"
archChron::chron_string_decompose(cstring)
#> $c_system
#> [1] "fortME"
#> 
#> $c_string
#> [1] "HaA2" "HaA"  "SBZ"  "BZ"  
#> [5] "Vorg"
#> 
#> $c_value
#> [1] 0.8

Due to the construction scheme of the chronology string, the parts of the chronology string (phase names and chronology system name) must not include:

The chronology string should always use UTF-8 encoding, and hence special characters should work but should be used carefully and with caution. Nevertheless, restricting the chronology string to ASCII characters is recommended.

Furthermore, one should consider appropriate phase tags. The complete phase name comprises the whole chronology string, but the phase tags are parts of the chronology hierarchy, such as ‘HaA2’ from the above example. Each tag must be unique for the superior hierarchy node. There cannot be two ‘HaA2’ entries within ‘HaA’. They should also be unique in the whole chronology system, making them globally unique (if there are no duplicate names of the chronology systems) because the name of the chronology system is part of the chronology string.

A dangerous pitfall is the use of numbers, in particular Latin numbers. If we search for a phase “system_time>phase>subphaseI” and there are also sites with “system_time>phase>subphaseII”, we will have included all sites of subphase II within the search result of subphase I because “system_time_phase_subphaseI” is a substring of “system_time_phase_subphaseII”. This can also apply if phase numbers increase above 9 with Arabic numbers, because “10” starts with a “1” and the phases are not considered numbers but text by the system. All these kinds of labels can be used with the name_long field, which is not used for filtering but only for labelling.

The final part of the chronology string is the probability value, ranging from zero to one. Any kind of uncertainty can be mapped with this number. In general, the probability values are inspired by fuzzy logic. This makes it clear that the “probability” field does not only contain proper probabilities. The archChron package deliberately uses just one probability value for each date. It is tempting to differentiate the different kinds of uncertainty, but this would make the system far too complex. We accept a kind of second-order uncertainty: the uncertainty of the degree to which first-order uncertainty contributions contribute to the total uncertainty, and the lack of a definition of the total uncertainty that allows for subjective components. In practice, this is much more than most projects and alternative systems implement, and it is feasible.

Working with archChron

This version uses the terms cref or chronref for chronological references that are stored in the chronology description files, and crep or chronrep for chronological representations (a set of dataframes or duckdb-tables that represent actual dates and are embedded in a chronrep object that also stores chronref, metadata, and subset-tables). The subset tables store Boolean filters. The new approach is simpler to use and makes some previous functions obsolete.

With archChron, we consider different objects: - Data: dataframes with a chronology column containing a chronstring and some other columns - A date: chronological information - Chronological reference systems (cref or chronref): formal descriptions of chronologies stored in CSV files. Chronological reference systems are loaded into archChron as chronref objects with the chronsys_getChronsys() function and are lists of dataframes, each representing a chronology system - Chronological representations (crep or chronrep): representations of dates considering the chronological reference systems. The chronrep objects are created as a DuckDB in-memory database and can be stored as CSV files, RDS files, or DuckDB database files. The DuckDB database is connected with a cconn object. The chron_chronrep_create(), chron_chronrep_read(), chron_chronrep_write(), as well as the chron_dates_process() functions are used.

When working with archChron, the chronrep and chronref objects are primarily used. The former represents the data, whilst the latter contains information about the chronological systems and the phases they contain (such as absolute dates and the hierarchical order of the phases). Both objects contain a table/dataframe for each chronological system used. Chronrep also contains a metadata table and a subset table for each chronological system, in which filters can be stored as Boolean values.

Scheme of data components in the archChron concept
Scheme of data components in the archChron concept

Checking Chronologies

Chronology system descriptions are stored in CSV files as explained above. Some are available at the chronsys repository, but they can also be created manually. We can use chron_chronref_valid() to validate chronology files. The function will list possible problems.

archChron::chron_chronref_valid(
  file = here::here("inst", "chronDechelette1913-1914.csv"  ))
#> File: /home/fon/Nextcloud/gits/archChron/inst/chronDechelette1913-1914.csv 
#> Test 6: possible_roman_numerals
#>   - 2: ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze
#>   - 3: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer
#>   - 4: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1
#>   - 5: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2
#>   - 6: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer
#>   - 7: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1
#>   - 8: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2
#>   - 9: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3
#> 
#> Test 7: spaces
#>   - 1: ChronDechelette1913-1914_Metal Ages
#>   - 2: ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze
#>   - 3: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer
#>   - 4: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1
#>   - 5: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2
#>   - 6: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer
#>   - 7: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1
#>   - 8: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2
#>   - 9: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3
#> 
#> Test 9b: minus
#>   - 2: ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze
#>   - 3: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer
#>   - 4: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1
#>   - 5: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2
#>   - 6: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer
#>   - 7: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1
#>   - 8: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2
#>   - 9: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3
#> 
#> Test 18: name_short_mismatch
#>   - 1: ChronDechelette1913-1914_Metal Ages

The function chron_chronref_reconst() reconstructs the structural information based on the chronstring. This allows the structural information to be filled in automatically and makes creating chronsys files easier.

archChron::chron_chronref_reconst(
  file = here::here("inst", "chronDechelette1913-1914.csv"  ), 
  overwrite = FALSE)
#>                   c_system id
#> 1 ChronDechelette1913-1914  1
#> 2 ChronDechelette1913-1914  2
#> 3 ChronDechelette1913-1914  3
#> 4 ChronDechelette1913-1914  4
#> 5 ChronDechelette1913-1914  5
#> 6 ChronDechelette1913-1914  6
#> 7 ChronDechelette1913-1914  7
#> 8 ChronDechelette1913-1914  8
#> 9 ChronDechelette1913-1914  9
#>   p_id c_level c_order
#> 1    0       1       1
#> 2    1       2       1
#> 3    1       2       2
#> 4    3       3       1
#> 5    3       3       2
#> 6    1       2       3
#> 7    6       3       1
#> 8    6       3       2
#> 9    6       3       3
#>                                                                    chronstring
#> 1                                          ChronDechelette1913-1914_Metal Ages
#> 2                          ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze
#> 3                    ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer
#> 4 ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1
#> 5 ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2
#> 6                    ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer
#> 7            ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1
#> 8            ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2
#> 9            ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3
#>              name_short
#> 1            Metal Ages
#> 2       I-Age-du-bronze
#> 3 II-Premier-age-du-fer
#> 4    Hallstatt-Periode1
#> 5    Hallstatt-Periode2
#> 6 III-Second-age-du-fer
#> 7               LaTene1
#> 8               LaTene2
#> 9               LaTene3
#>                                               name_long
#> 1                                            Metal Ages
#> 2                                      I. Age du bronze
#> 3   II. Premier \xe2ge du fer ou \xe9poque de Hallstatt
#> 4                                          P\xc9RIODE I
#> 5                                         P\xc9RIODE II
#> 6 III. Second \xe2ge du fer, ou \xe9poque de La T\xe8ne
#> 7                                          La T\xe8ne I
#> 8                                         La T\xe8ne II
#> 9                                        La T\xe8ne III
#>   start  end start_error
#> 1 -2250    0         250
#> 2 -2250 -900         250
#> 3  -900 -500           0
#> 4  -900 -700           0
#> 5  -700 -500           0
#> 6  -500    0           0
#> 7  -500 -300           0
#> 8  -300 -100           0
#> 9  -100    0           0
#>   end_error
#> 1         0
#> 2         0
#> 3         0
#> 4         0
#> 5         0
#> 6         0
#> 7         0
#> 8         0
#> 9         0
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   description
#> 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
#> 2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Age du bronze, y compris la phase initiale du cuivre (envi- ron de la seconde moiti\xe9 du troisi\xe8me mill\xe9naire \xe0 l'an 900)
#> 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             II. Premier \xe2ge du fer ou \xe9poque de Hallstatt (de l'an 900 \xe0 l'an 500)
#> 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      P\xc9RIODE I. (De 900 \xe0 700 avant J.-C): Ep\xe9es de bronze hallstaltiennes (pl. VI, fig. I). Ep\xe9es de 1er hallslattiennes de m\xeame forme que les pr\xe9c\xe9dentes (fig. 7i. Ces \xe9p\xe9es ont des fourreaux de cuir \xe0 bouterolles carac- t\xe9ristiques (fig. 2-6), les plus anciennes sp\xe9ciales \xe0 l'\xe9p\xe9e de bronze, les plus r\xe9centes communes \xe0 l'\xe9p\xe9e de bronze et \xe0 l'\xe9p\xe9e de 1er). Rasoirs en bronze ajour\xe9s, souvent plus orn\xe9s que ceux de l'\xe2ge du bronze (fig. 8-10). Pas de fibules. Objets de parure tr\xe8s rares et mal d\xe9finis. L'rnes c\xe9ramiques \xe0 col \xe9vas\xe9 (lig. 12-13); quelques vases sont orn\xe9s de grecques incis\xe9es. Cistes italiques en bronze battu, \xe0 cordons espac\xe9s (vers la fin de la p\xe9riode) (fig. 14). Dans l'Allemagne du sud et \xe0 Hallstatt on trouve, en outre, les objets suivants associ\xe9s aux pr\xe9c\xe9dents : Grandes \xe9pingles \xe0 plusieurs sph\xe8res superpos\xe9es. Fibules \xab a luneltes \xbb (ou \xe0 double spirale) (p. 524, fig. 220, n\xb0 2). Ces fibules sont les seules que renferment \xe0 Hallstatt les tombesde la premi\xe8re p\xe9riode. On les retrouve encore dans quelques tombes de la seconde. Pas de fibules dans les tombes viriles de la premi\xe8re p\xe9riode *.
#> 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        P\xc9RIODE II. (De 700 \xe0 500 avant J.-C.) : Poignards de fer \xe0 antennes (pl. VII, fig. 1-5). Quelques grandes \xe9p\xe9es de fer \xe9galement \xe0 antennes Larges ceintures en bronze battu, \xe0 d\xe9cor estamp\xe9, rarement grav\xe9 (fig. 6-7). Bracelets et anneaux de jambe en bronze de formes vari\xe9es (fig. 10-19). Gros bracelets de lignite. Bras- sards-lonnelets en bronze mince grav\xe9 (fig. 20). Pendants d'oreilles en bronze, en forme de croissants creux (fig. 8) ou de ruban (fig. 9). Kpingles de bronze \xe0 cou de cygne (fig. 21). Trousses de toilette (fig. 22). Urnes c\xe9ramiques \xe0 panse renfl\xe9e, renfer- mant souvent de petits vases (fig. 23). Fibules nombreuses \xe0 navicelle, \xe0 sangsue, \xe0 timbale, \xe0 arc serpentiforme, \xe0 arbal\xe8te (pl. VIII, fig. 24-35). Quelques icnocho\xe9s el vases en bronze de style ionien, impor- t\xe9s de la Gr\xe8ce ou de la Grande-Gr\xe8ce par l'Italie du nord (lig. 37-39). Rares bijoux d'or \xe9trusques (fig. 36). Vases atliques du vi" si\xe8cle \xe0 ligures noires, introduits en Franche-Comt\xe9 parla m\xeame voie. Dansjes Alpes orientales el \xe0 Hallstatt, situles orn\xe9es de style v\xe9n\xe9lo-ionien (elles manquent dans l'Allemagne du sud el en France). Cistes italiques en bronze battu, \xe0 cordons rapproch\xe9s (fig. 40); elles se trouvent encore au d\xe9but de l'\xe9poque de La T\xe8ne. 
#> 6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          III. Second \xe2ge du fer, ou \xe9poque de La T\xe8ne (de l'an 500 au d\xe9but de notre \xe8re).  
#> 7                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           LA T\xc8NE i (De 500 \xe0 300 av. J.-C). Ep\xe9es \xe0 pointe effil\xe9e, ordinairement courtes, sans croisi\xe8re. Fourreaux \xe0 bouterolle ajour\xe9e, semi-circulaire ou cordiforme, plus rarement, tr\xe9fl\xe9e (pi. IX, fig. 1-4). Pas de cha\xeenes m\xe9talliques servant de baudriers. Quelques casques italiques et celtiques en bronze battu (fig. 5). Pas de boucliers \xe0 garnitures m\xe9talliques. Riches parures f\xe9minines comprenant de nombreux torques \xe0 tige rigide (fig. 6-9) *. Fibules \xe0 appendice caudal repli\xe9 sur l'arc, mais avec extr\xe9mit\xe9 libre, les plus anciennes orn\xe9es de masques humains ou de motifs zoomorphes (fig. 13-15). Bracelets en bronze de types vari\xe9s (fig. 10-12). Magnifiques bijoux, ornements et accessoires de costume, en or et en bronze, d\xe9cor\xe9s souvent de motifs anthropomorphes et zoo- morphes, d'un style caract\xe9ristique (pi. X, fig. 16-20). Dans la Gaule du nord-est, c\xe9ramique abondante, comprenant des vases \xab car\xe9n\xe9s \xbb et des vases turbiniformes. Quelques-uns sont orn\xe9s de traits incis\xe9s, avec rehauts peints; d'autres ont des pein- tures \xe0 motifs curvilignes, sans traits incis\xe9s (fig. 21-23). Nombreuses importations grecques et italo-grecques comprenant : 1\xb0 des vases de bronze - stamnoi, oenocho\xe9s \xe0 bec tr\xe9fl\xe9, amphores, tr\xe9pieds, bassins et situles - (fig. 24-27) ; 2\xb0 des vases c\xe9ramiques peints de fabrique attique (vases \xe0 figures rouges) ; 3\xb0 des amphores en terre cuite sans peintures. Les s\xe9pultures sont ordinairement des tombes plates \xe0 inhuma- tion. On rencontre encore dans certaines r\xe9gions des s\xe9pultures tumulaires (inhumations et incin\xe9rations).  
#> 8                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  LA T\xc8NE II (De 300 \xe0 100 av. J.-C). Ep\xe9es longues \xe0 pointe faiblement arrondie, avec une sorte de croisi\xe8re campaniforme, forg\xe9e s\xe9par\xe9ment. Bouterolles non ajou- r\xe9es (pi. XI, fig. 1-3). Baudriers d'\xe9p\xe9es form\xe9s d'une cha\xeene m\xe9tallique en fer ou en bronze (fig. 4). Boucliers de bois \xe0 umbos de fer en forme de pontet, plus rarement ellipso\xefdaux (fig. 5-6). Bracelets de verre : tige bleu-cobalt \xe0 zigzags jaunes, blanche, translucides, \xe0 filets bleus, etc. (fig. 13-14). Bracelets m\xe9talliques plus rares. Le mod\xe8le \xe0 grandes oves, lisses ou orn\xe9es, est le plus caract\xe9ristique (fig. 7). Bagues \xe0 chaton spiraliforme assez r\xe9pandues (fig. 15). Torques \xe0 tige rigide tr\xe8s rares. Cha\xeenes-ceintures de femmes, en bronze ou en fer (fig. 10-12). Fibules \xe0 appendice caudal toujours repli\xe9, mais attach\xe9 \xe0 l'arc (fig. 8-9). Apparition des premi\xe8res monnaies gauloises dans les s\xe9pul- tures. Objets d'importations grecques ou italiques rares en dehors des districts avoisinant la M\xe9diterran\xe9e. Dans ces r\xe9gions, les tombes et les oppidums livrent souvent des vases campaniens en terre rouge avec vernis noir (fig. 16-17).
#> 9 LA T\xc8NE III (De l'an 100 \xe0 l'\xe8re chr\xe9tienne). Ep\xe9es tr\xe8s longues, \xe0 terminaison arrondie, sans croisi\xe8re. Bou-  terolles \xe9galement arrondies \xe0 leur extr\xe9mit\xe9 et renforc\xe9es sur toute leur hauteur par de petites tiges transversales dispos\xe9es comme les barreaux d'une \xe9chelle (pi. XII, fig. 1-3). Poignards \xab anthropo\xefdes \xbb (fig. 4). Boacliers \xe0 umbos de fer, de forme ellipso\xefdale ou circulaire (fig. 5, 6). Eperons de fer ou de bronze (fig. 20-21). Nombreux clous et bossettes en bronze \xe0 d\xe9cor crucial \xe9maill\xe9, ornant notamment les casques, les agrafes de ceinturons, les pi\xe8ces de harnachement (fig. 22-23). Fibules \xe0 porte-agrafe ajour\xe9 et autres types vari\xe9s (fig. 9-15). Bracelets de fer \xe0 bouts tordus en spirale (fig. 17). Grains de collier \xe9pais en verre polychrome, d\xe9cor\xe9s de spirales, de mouchetures, etc. (fig. 18, 19). Anneaux-pendeloques orn\xe9s de globules (fig. 16). Amulettes-pendeloques en bronze, figurant des animaux, d'un style caract\xe9ristique (fig. 24-25). Chenets d'argile surmont\xe9s le plus souvent d'une t\xeate de b\xe9lier (%- "') Chenets ou landiers en fer et pieds de table, portant \xe9galement une t\xeate de b\xe9lier ou de bovid\xe9 (fig. 8). Outils, instruments et ustensiles de fer abondants (pi. XIII, fig. 26, 30-33). Apparition des premi\xe8res clefs en Gaule (fig. 27-29). Nombreuses monnaies gauloises, dont beaucoup sont en bronze coul\xe9 (fig. 34-35). Menus objets de bronze caract\xe9ristiques : \xe9tuis \xe0 aiguilles (fig. 36), anses de coupes d\xe9riv\xe9es d'un mod\xe8le hell\xe9nistique (fig. 46, 47), etc. Nombreuses poteries indig\xe8nes \xe0 p\xe2te noire ou grise, caract\xe9- ris\xe9es par leurs formes ou par leur d\xe9cor, quelques-unes faites au tour (fig. 37-39). Des graffites en caract\xe8res grecs (fig. 42) indiquent que les Gaulois commencent \xe0 faire usage de l'\xe9criture. Vases peints du type de Bibracte-Stradonitz(fig. 40-41). Sceaux de bronze (fig. 45, 48). Amphores italiques en argile, de forme allong\xe9e, parfois avec estampilles de l'\xe9poque de C\xe9sar ou d'Auguste (fig. 43). Petits vases en terre rouge \xab sigill\xe9s \xbb, import\xe9s des ateliers d'Arezzo (Etrurie) dans la Gaule centrale. Vases du potier Aco (fig. 44). S\xe9pultures \xe0 incin\xe9ration, en g\xe9n\xe9ral assez pauvres. 
#>   links comment
#> 1    NA      NA
#> 2    NA      NA
#> 3    NA      NA
#> 4    NA      NA
#> 5    NA      NA
#> 6    NA      NA
#> 7    NA      NA
#> 8    NA      NA
#> 9    NA      NA

Chronrep Object

In addition to the chronology string, the archChron package uses a data frame-based representation of dates. This representation uses the structures of the chronology reference object and adds probability values or membership degrees stored in a second data frame. Representations for several chronology systems are combined in a list.

Creating Chronrep Objects

The function chron_chronrep_create() creates an empty chronology representation object from a list of chronology references.

chronrepcon <- archChron::chron_chronrep_create(
  chron_ref = chron_ref, 
  out       = "list")
str(chronrepcon)
#> List of 7
#>  $ crep_fortNE   :'data.frame':  0 obs. of  28 variables:
#>   ..$ id           : chr(0) 
#>   ..$ Vorg         : num(0) 
#>   ..$ BA           : num(0) 
#>   ..$ olderBA      : num(0) 
#>   ..$ Per1         : num(0) 
#>   ..$ Per2         : num(0) 
#>   ..$ Per3         : num(0) 
#>   ..$ youngerBA    : num(0) 
#>   ..$ Per4         : num(0) 
#>   ..$ Per5         : num(0) 
#>   ..$ IA           : num(0) 
#>   ..$ PRIA         : num(0) 
#>   ..$ PRIA1        : num(0) 
#>   ..$ Per6         : num(0) 
#>   ..$ PRIA1A       : num(0) 
#>   ..$ PRIA1B       : num(0) 
#>   ..$ olderPRIA1b  : num(0) 
#>   ..$ youngerPRIA1b: num(0) 
#>   ..$ PRIA2        : num(0) 
#>   ..$ PRIA2A       : num(0) 
#>   ..$ PRIA2B       : num(0) 
#>   ..$ PRIA2C       : num(0) 
#>   ..$ PRIA2D       : num(0) 
#>   ..$ Rom          : num(0) 
#>   ..$ Mig          : num(0) 
#>   ..$ Med          : num(0) 
#>   ..$ EMed         : num(0) 
#>   ..$ Viking       : num(0) 
#>  $ crep_fortME   :'data.frame':  0 obs. of  50 variables:
#>   ..$ id    : chr(0) 
#>   ..$ fortME: num(0) 
#>   ..$ Vorg  : num(0) 
#>   ..$ SZ    : num(0) 
#>   ..$ BA    : num(0) 
#>   ..$ FBA   : num(0) 
#>   ..$ BzA1  : num(0) 
#>   ..$ BzA2  : num(0) 
#>   ..$ MBA   : num(0) 
#>   ..$ BzB   : num(0) 
#>   ..$ BzC   : num(0) 
#>   ..$ BzC1  : num(0) 
#>   ..$ BzC2  : num(0) 
#>   ..$ SBA   : num(0) 
#>   ..$ BzD   : num(0) 
#>   ..$ HaA   : num(0) 
#>   ..$ HaA1  : num(0) 
#>   ..$ HaA2  : num(0) 
#>   ..$ HaB   : num(0) 
#>   ..$ HaB1  : num(0) 
#>   ..$ HaB2/3: num(0) 
#>   ..$ IA    : num(0) 
#>   ..$ Ha    : num(0) 
#>   ..$ HaC   : num(0) 
#>   ..$ HaC1  : num(0) 
#>   ..$ HaC1a : num(0) 
#>   ..$ HaC1b : num(0) 
#>   ..$ HaC2  : num(0) 
#>   ..$ HaD   : num(0) 
#>   ..$ HaD1  : num(0) 
#>   ..$ HaD2  : num(0) 
#>   ..$ HaD3  : num(0) 
#>   ..$ Lt    : num(0) 
#>   ..$ Flt   : num(0) 
#>   ..$ LtA   : num(0) 
#>   ..$ LtB   : num(0) 
#>   ..$ LtB1  : num(0) 
#>   ..$ LtB2  : num(0) 
#>   ..$ LtC   : num(0) 
#>   ..$ LtC1  : num(0) 
#>   ..$ LtC2  : num(0) 
#>   ..$ LtD   : num(0) 
#>   ..$ LtD1  : num(0) 
#>   ..$ LtD1a : num(0) 
#>   ..$ LtD1b : num(0) 
#>   ..$ LtD2  : num(0) 
#>   ..$ LtD2a : num(0) 
#>   ..$ LtD2b : num(0) 
#>   ..$ Rom   : num(0) 
#>   ..$ MANZ  : num(0) 
#>  $ cref_fortNE   :Classes 'chronsys' and 'data.frame':   27 obs. of  15 variables:
#>   ..$ c_system   : chr [1:27] "fortNE" "fortNE" "fortNE" "fortNE" ...
#>   ..$ id         : int [1:27] 1 2 3 4 5 6 7 8 9 10 ...
#>   ..$ p_id       : int [1:27] 0 1 2 3 3 3 2 7 7 1 ...
#>   ..$ c_level    : int [1:27] 1 2 3 4 4 4 3 4 4 2 ...
#>   ..$ c_order    : int [1:27] 1 1 1 1 2 3 2 4 5 2 ...
#>   ..$ chronstring: chr [1:27] "fortNE_Vorg" "fortNE_Vorg>BA" "fortNE_Vorg>BA>olderBA" "fortNE_Vorg>BA>olderBA>Per1" ...
#>   ..$ name_short : chr [1:27] "Vorg" "BA" "olderBA" "Per1" ...
#>   ..$ name_long  : chr [1:27] "Vorgeschichte" "Bronzezeit" "" "Periode I" ...
#>   ..$ start      : int [1:27] -1800 -1800 -1800 -1800 -1500 -1300 -1100 -1100 -950 -750 ...
#>   ..$ end        : int [1:27] 1050 -750 -1100 -1500 -1300 -1100 -750 -950 -750 1050 ...
#>   ..$ start_error: int [1:27] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ end_error  : int [1:27] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ description: chr [1:27] "" "" "" "" ...
#>   ..$ links      : logi [1:27] NA NA NA NA NA NA ...
#>   ..$ comment    : logi [1:27] NA NA NA NA NA NA ...
#>  $ cref_fortME   :Classes 'chronsys' and 'data.frame':   49 obs. of  15 variables:
#>   ..$ c_system   : chr [1:49] "fortME" "fortME" "fortME" "fortME" ...
#>   ..$ id         : int [1:49] 1 2 3 4 5 6 7 8 9 10 ...
#>   ..$ p_id       : int [1:49] 0 1 2 2 4 5 5 4 8 8 ...
#>   ..$ c_level    : int [1:49] 0 1 2 2 3 4 4 3 4 4 ...
#>   ..$ c_order    : int [1:49] 1 1 1 2 1 1 2 2 1 2 ...
#>   ..$ chronstring: chr [1:49] "fortME" "fortME_Vorg" "fortME_Vorg>SZ" "fortME_Vorg>BA" ...
#>   ..$ name_short : chr [1:49] "fortME" "Vorg" "SZ" "BA" ...
#>   ..$ name_long  : chr [1:49] "root" "Vorgeschichte" "Steinzeit" "Bronzezeit" ...
#>   ..$ start      : int [1:49] -6000 -6000 -6000 -2200 -2200 -2200 -2000 -1600 -1600 -1500 ...
#>   ..$ end        : int [1:49] 2000 -15 -2200 -800 -1600 -2000 -1600 -1300 -1500 -1300 ...
#>   ..$ start_error: int [1:49] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ end_error  : int [1:49] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ description: chr [1:49] "" "" "" "" ...
#>   ..$ links      : logi [1:49] NA NA NA NA NA NA ...
#>   ..$ comment    : logi [1:49] NA NA NA NA NA NA ...
#>  $ subsets_fortNE:'data.frame':  0 obs. of  3 variables:
#>   ..$ id : chr(0) 
#>   ..$ all: logi(0) 
#>   ..$ x  : logi(0) 
#>  $ subsets_fortME:'data.frame':  0 obs. of  3 variables:
#>   ..$ id : chr(0) 
#>   ..$ all: logi(0) 
#>   ..$ x  : logi(0) 
#>  $ metadata      :'data.frame':  9 obs. of  2 variables:
#>   ..$ key  : chr [1:9] "chronsys-version" "chronrep_created-by" "archChron-version" "chronrep_creation-date" ...
#>   ..$ value: chr [1:9] "NA" "archChron" "2026.6.12" "2026-06-12" ...

This function can also create a DuckDB representation of the dates. The DuckDB version might be more convenient and efficient for some purposes because we can run queries in DuckDB very quickly, and most archChron functions are designed to work with a DuckDB database. Nevertheless, the list representation leaves it to us to write the analysis code, which might be the right solution for some workflows.

chronrepcon <- archChron::chron_chronrep_create(
  chron_ref = chron_ref, 
  out       = "duckdb", 
  duckfile  = ":memory:")
str(chronrepcon)
#> Formal class 'duckdb_connection' [package "duckdb"] with 8 slots
#>   ..@ conn_ref      :<externalptr> 
#>   ..@ driver        :Formal class 'duckdb_driver' [package "duckdb"] with 6 slots
#>   .. .. ..@ database_ref:<externalptr> 
#>   .. .. ..@ config      :List of 2
#>   .. .. .. ..$ extension_directory: chr "/home/fon/.local/share/R/duckdb/extensions"
#>   .. .. .. ..$ secret_directory   : chr "/home/fon/.local/share/R/duckdb/stored_secrets"
#>   .. .. ..@ dbdir       : chr ":memory:"
#>   .. .. ..@ read_only   : logi FALSE
#>   .. .. ..@ convert_opts:List of 8
#>   .. .. .. ..$ timezone_out     : chr "UTC"
#>   .. .. .. ..$ tz_out_convert   : chr "with"
#>   .. .. .. ..$ bigint           : chr "numeric"
#>   .. .. .. ..$ array            : chr "none"
#>   .. .. .. ..$ geometry         : chr "blob"
#>   .. .. .. ..$ arrow            : logi FALSE
#>   .. .. .. ..$ experimental     : logi FALSE
#>   .. .. .. ..$ strict_relational: logi TRUE
#>   .. .. ..@ bigint      : chr "numeric"
#>   ..@ debug         : logi FALSE
#>   ..@ convert_opts  :List of 8
#>   .. ..$ timezone_out     : chr "UTC"
#>   .. ..$ tz_out_convert   : chr "with"
#>   .. ..$ bigint           : chr "numeric"
#>   .. ..$ array            : chr "none"
#>   .. ..$ geometry         : chr "blob"
#>   .. ..$ arrow            : logi FALSE
#>   .. ..$ experimental     : logi FALSE
#>   .. ..$ strict_relational: logi TRUE
#>   ..@ reserved_words: chr [1:489] "abort" "absolute" "access" "action" ...
#>   ..@ timezone_out  : chr "UTC"
#>   ..@ tz_out_convert: chr "with"
#>   ..@ bigint        : chr "numeric"

Our next task is to insert some actual dates into this kind of representation. The convenient function chron_dates_process() internally calls chron_chronrep_create() and chronsys_getChronsys() and inserts dates from a dataframe or file (if the parameter dataname = "localfile.csv" is set). This function produces an in-memory database that can be stored to a file later.

The parameter main is the dataframe with a chronology column (chroncol) that contains the chronstrings.

cconn <- archChron::chron_dates_process(
  main     = archChron::fort_main_sites,
  idcol    = "id_main",
  chroncol = "chron",
  agg      = "max",
  #dataname = "localfile.csv",
  cssource = "codeberg",
  cspath   = here::here("inst")
)
#> Warning in write.csv(main[,
#> c(idcol, chroncol)], file =
#> temp_csv, sep = ";", : Versuch
#> ignoriert 'sep' zu setzen

Aoristic Analysis

The function chron_dates_process() takes a given chronstring and assigns the specified probability to the parent phases, whilst the child, finer-grained phases remain empty. Using the aoristic approach (Ratcliffe/McCullagh (1998)), the probabilities can be distributed iteratively across the finer-grained phases. Optionally, we can also sum the probabilities backwards.

archChron::chron_chronrep_aoristic(
    cconn     = cconn,
    chron_ref = chron_ref,
    id        = NULL,
    subset    = "all",
    aoristic  = "temp",
    bottomup  = TRUE
)
#> fortME: 6 IDs aktualisiert.
#> fortNE: 6 IDs aktualisiert.
#> Metadaten-Eintrag geschrieben.

Queries, Writing and Reading Chronrep

We can work directly on the DuckDB object that was produced in the background.

DBI::dbGetQuery(
  conn       = cconn, 
  statement  = "
Show Tables;"
)
#>             name
#> 1    cref_fortME
#> 2    cref_fortNE
#> 3    crep_fortME
#> 4    crep_fortNE
#> 5       metadata
#> 6 subsets_fortME
#> 7 subsets_fortNE
DBI::dbGetQuery(
  conn       = cconn, 
  statement  = "
    SELECT * FROM crep_fortME;"
)
#>     id fortME Vorg SZ  BA FBA
#> 1 1412      1    1  0 0.0   0
#> 2 1164      1    1  0 0.7   0
#> 3 1123      1    1  0 1.0   0
#> 4 1146      1    1  0 0.0   0
#> 5 1235      1    1  0 0.0   0
#> 6  168      0    0  0 0.0   0
#>   BzA1 BzA2 MBA BzB BzC BzC1
#> 1    0    0   0   0   0    0
#> 2    0    0   0   0   0    0
#> 3    0    0   0   0   0    0
#> 4    0    0   0   0   0    0
#> 5    0    0   0   0   0    0
#> 6    0    0   0   0   0    0
#>   BzC2 SBA  BzD  HaA HaA1 HaA2
#> 1    0 0.0 0.00 0.00 0.00 0.00
#> 2    0 0.7 0.14 0.21 0.14 0.07
#> 3    0 1.0 0.00 1.00 0.00 1.00
#> 4    0 0.0 0.00 0.00 0.00 0.00
#> 5    0 0.0 0.00 0.00 0.00 0.00
#> 6    0 0.0 0.00 0.00 0.00 0.00
#>    HaB HaB1 HaB2/3  IA  Ha HaC
#> 1 0.00 0.00   0.00 1.0 0.0   0
#> 2 0.35 0.14   0.21 0.7 0.7   0
#> 3 1.00 1.00   0.00 1.0 1.0   0
#> 4 0.00 0.00   0.00 1.0 0.0   0
#> 5 0.00 0.00   0.00 1.0 0.0   0
#> 6 0.00 0.00   0.00 0.0 0.0   0
#>   HaC1 HaC1a HaC1b HaC2 HaD
#> 1    0     0     0    0 0.0
#> 2    0     0     0    0 0.7
#> 3    0     0     0    0 1.0
#> 4    0     0     0    0 0.0
#> 5    0     0     0    0 0.0
#> 6    0     0     0    0 0.0
#>        HaD1       HaD2      HaD3
#> 1 0.0000000 0.00000000 0.0000000
#> 2 0.3705882 0.08235294 0.2470588
#> 3 0.5294118 0.11764706 0.3529412
#> 4 0.0000000 0.00000000 0.0000000
#> 5 0.0000000 0.00000000 0.0000000
#> 6 0.0000000 0.00000000 0.0000000
#>   Lt Flt   LtA   LtB LtB1  LtB2
#> 1  1 1.0 0.350 0.650 0.30 0.350
#> 2  0 0.0 0.000 0.000 0.00 0.000
#> 3  1 1.0 1.000 0.000 0.00 0.000
#> 4  1 0.5 0.175 0.325 0.15 0.175
#> 5  1 0.7 0.700 0.000 0.00 0.000
#> 6  0 0.0 0.000 0.000 0.00 0.000
#>   LtC LtC1 LtC2 LtD      LtD1
#> 1   1  0.5  0.5   1 0.4814815
#> 2   0  0.0  0.0   0 0.0000000
#> 3   0  0.0  0.0   0 0.0000000
#> 4   0  0.0  0.0   1 0.4814815
#> 5   0  0.0  0.0   1 0.4814815
#> 6   0  0.0  0.0   0 0.0000000
#>       LtD1a     LtD1b      LtD2
#> 1 0.1851852 0.2962963 0.5185185
#> 2 0.0000000 0.0000000 0.0000000
#> 3 0.0000000 0.0000000 0.0000000
#> 4 0.1851852 0.2962963 0.5185185
#> 5 0.1851852 0.2962963 0.5185185
#> 6 0.0000000 0.0000000 0.0000000
#>       LtD2a     LtD2b Rom MANZ
#> 1 0.2962963 0.2222222   0    0
#> 2 0.0000000 0.0000000   0    0
#> 3 0.0000000 0.0000000   0    0
#> 4 0.2962963 0.2222222   1    0
#> 5 0.2962963 0.2222222   1    0
#> 6 0.0000000 0.0000000   0    0

Here, it is visible that the probabilities from the original chronstrings are distributed to all possible phases. If there are multiple dates for an object (complete chronstrings separated by commas), these dates are aggregated using the function in the agg parameter. The functions max, sum, and iprod (=1/product(1/probability)) can be used.

The object created by the chron_dates_process() function is an in-memory DuckDB database. In particular, if we have performed some analysis on the input data and not only loaded the dates, it is useful to store the chronrep object. archChron allows storing it as:

  • A list of data frames in an RDS file (type = "list", targetfile = "xxx.rds")
  • A DuckDB database file (type = "duckdb", targetfile = "xxx.duckdb")
  • A folder with CSV files (type = "csv", targetdir = "dates")
archChron::chron_chronrep_write(
  cconn      = cconn,
  type       = "list",
  targetfile = here::here("inst", "kfd_crep")
)
#> $cref_fortME
#>    c_system id p_id c_level
#> 1    fortME  1    0       0
#> 2    fortME  2    1       1
#> 3    fortME  3    2       2
#> 4    fortME  4    2       2
#> 5    fortME  5    4       3
#> 6    fortME  6    5       4
#> 7    fortME  7    5       4
#> 8    fortME  8    4       3
#> 9    fortME  9    8       4
#> 10   fortME 10    8       4
#> 11   fortME 11   10       5
#> 12   fortME 12   10       5
#> 13   fortME 13    4       3
#> 14   fortME 14   13       4
#> 15   fortME 15   13       4
#> 16   fortME 16   15       5
#> 17   fortME 17   15       5
#> 18   fortME 18   13       4
#> 19   fortME 19   18       5
#> 20   fortME 20   18       5
#> 21   fortME 21    2       2
#> 22   fortME 22   21       3
#> 23   fortME 23   22       4
#> 24   fortME 24   23       5
#> 25   fortME 25   24       6
#> 26   fortME 26   24       6
#> 27   fortME 27   23       5
#> 28   fortME 28   22       4
#> 29   fortME 29   28       5
#> 30   fortME 30   28       5
#> 31   fortME 31   28       5
#> 32   fortME 32   21       3
#> 33   fortME 33   32       4
#> 34   fortME 34   33       5
#> 35   fortME 35   33       5
#> 36   fortME 36   35       6
#> 37   fortME 37   35       6
#> 38   fortME 38   32       4
#> 39   fortME 39   38       5
#> 40   fortME 40   38       5
#> 41   fortME 41   32       4
#> 42   fortME 42   41       5
#> 43   fortME 43   42       6
#> 44   fortME 44   42       6
#> 45   fortME 45   41       5
#> 46   fortME 46   45       6
#> 47   fortME 47   45       6
#> 48   fortME 48    1       1
#> 49   fortME 49    1       1
#>    c_order
#> 1        1
#> 2        1
#> 3        1
#> 4        2
#> 5        1
#> 6        1
#> 7        2
#> 8        2
#> 9        1
#> 10       2
#> 11       1
#> 12       2
#> 13       3
#> 14       1
#> 15       2
#> 16       1
#> 17       2
#> 18       3
#> 19       1
#> 20       2
#> 21       3
#> 22       1
#> 23       1
#> 24       1
#> 25       1
#> 26       2
#> 27       2
#> 28       2
#> 29       1
#> 30       2
#> 31       3
#> 32       2
#> 33       1
#> 34       1
#> 35       2
#> 36       1
#> 37       2
#> 38       2
#> 39       1
#> 40       2
#> 41       3
#> 42       1
#> 43       1
#> 44       2
#> 45       2
#> 46       1
#> 47       2
#> 48       2
#> 49       3
#>                         chronstring
#> 1                            fortME
#> 2                       fortME_Vorg
#> 3                    fortME_Vorg>SZ
#> 4                    fortME_Vorg>BA
#> 5                fortME_Vorg>BA>FBA
#> 6           fortME_Vorg>BA>FBA>BzA1
#> 7           fortME_Vorg>BA>FBA>BzA2
#> 8                fortME_Vorg>BA>MBA
#> 9            fortME_Vorg>BA>MBA>BzB
#> 10           fortME_Vorg>BA>MBA>BzC
#> 11      fortME_Vorg>BA>MBA>BzC>BzC1
#> 12      fortME_Vorg>BA>MBA>BzC>BzC2
#> 13               fortME_Vorg>BA>SBA
#> 14           fortME_Vorg>BA>SBA>BzD
#> 15           fortME_Vorg>BA>SBA>HaA
#> 16      fortME_Vorg>BA>SBA>HaA>HaA1
#> 17      fortME_Vorg>BA>SBA>HaA>HaA2
#> 18           fortME_Vorg>BA>SBA>HaB
#> 19      fortME_Vorg>BA>SBA>HaB>HaB1
#> 20    fortME_Vorg>BA>SBA>HaB>HaB2/3
#> 21                   fortME_Vorg>IA
#> 22                fortME_Vorg>IA>Ha
#> 23            fortME_Vorg>IA>Ha>HaC
#> 24       fortME_Vorg>IA>Ha>HaC>HaC1
#> 25 fortME_Vorg>IA>Ha>HaC>HaC1>HaC1a
#> 26 fortME_Vorg>IA>Ha>HaC>HaC1>HaC1b
#> 27       fortME_Vorg>IA>Ha>HaC>HaC2
#> 28            fortME_Vorg>IA>Ha>HaD
#> 29       fortME_Vorg>IA>Ha>HaD>HaD1
#> 30       fortME_Vorg>IA>Ha>HaD>HaD2
#> 31       fortME_Vorg>IA>Ha>HaD>HaD3
#> 32                fortME_Vorg>IA>Lt
#> 33            fortME_Vorg>IA>Lt>Flt
#> 34        fortME_Vorg>IA>Lt>Flt>LtA
#> 35        fortME_Vorg>IA>Lt>Flt>LtB
#> 36   fortME_Vorg>IA>Lt>Flt>LtB>LtB1
#> 37   fortME_Vorg>IA>Lt>Flt>LtB>LtB2
#> 38            fortME_Vorg>IA>Lt>LtC
#> 39       fortME_Vorg>IA>Lt>LtC>LtC1
#> 40       fortME_Vorg>IA>Lt>LtC>LtC2
#> 41            fortME_Vorg>IA>Lt>LtD
#> 42       fortME_Vorg>IA>Lt>LtD>LtD1
#> 43 fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a
#> 44 fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b
#> 45       fortME_Vorg>IA>Lt>LtD>LtD2
#> 46 fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a
#> 47 fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b
#> 48                       fortME_Rom
#> 49                      fortME_MANZ
#>    name_short
#> 1      fortME
#> 2        Vorg
#> 3          SZ
#> 4          BA
#> 5         FBA
#> 6        BzA1
#> 7        BzA2
#> 8         MBA
#> 9         BzB
#> 10        BzC
#> 11       BzC1
#> 12       BzC2
#> 13        SBA
#> 14        BzD
#> 15        HaA
#> 16       HaA1
#> 17       HaA2
#> 18        HaB
#> 19       HaB1
#> 20     HaB2/3
#> 21         IA
#> 22         Ha
#> 23        HaC
#> 24       HaC1
#> 25      HaC1a
#> 26      HaC1b
#> 27       HaC2
#> 28        HaD
#> 29       HaD1
#> 30       HaD2
#> 31       HaD3
#> 32         Lt
#> 33        Flt
#> 34        LtA
#> 35        LtB
#> 36       LtB1
#> 37       LtB2
#> 38        LtC
#> 39       LtC1
#> 40       LtC2
#> 41        LtD
#> 42       LtD1
#> 43      LtD1a
#> 44      LtD1b
#> 45       LtD2
#> 46      LtD2a
#> 47      LtD2b
#> 48        Rom
#> 49       MANZ
#>                           name_long
#> 1                              root
#> 2                     Vorgeschichte
#> 3                         Steinzeit
#> 4                        Bronzezeit
#> 5                    Frühbronzezeit
#> 6                              BzA1
#> 7                              BzA2
#> 8                  Mittelbronzezeit
#> 9                               BzB
#> 10                              BzC
#> 11                             BzC1
#> 12                             BzC2
#> 13 Spätbronzezeit / Urnenfelderzeit
#> 14                     Bronzezeit D
#> 15                              HaA
#> 16                             HaA1
#> 17                             HaA2
#> 18                              HaB
#> 19                             HaB1
#> 20                           HaB2/3
#> 21                        Eisenzeit
#> 22                    Hallstattzeit
#> 23              Mittelhallstattzeit
#> 24                             HaC1
#> 25                            HaC1a
#> 26                            HaC1b
#> 27                             HaC2
#> 28                Späthallstattzeit
#> 29                             HaD1
#> 30                             HaD2
#> 31                             HaD3
#> 32                       Latènezeit
#> 33                   Frühlatènezeit
#> 34                              LtA
#> 35                              LtB
#> 36                             LtB1
#> 37                             LtB2
#> 38                 Mittellatènezeit
#> 39                             LtC1
#> 40                             LtC2
#> 41                   Spätlatènezeit
#> 42                             LtD1
#> 43                            LtD1a
#> 44                            LtD1b
#> 45                             LtD2
#> 46                            LtD2a
#> 47                            LtD2b
#> 48                          Römisch
#> 49              Mittelalter-Neuzeit
#>    start   end start_error
#> 1  -6000  2000           0
#> 2  -6000   -15           0
#> 3  -6000 -2200           0
#> 4  -2200  -800           0
#> 5  -2200 -1600           0
#> 6  -2200 -2000           0
#> 7  -2000 -1600           0
#> 8  -1600 -1300           0
#> 9  -1600 -1500           0
#> 10 -1500 -1300           0
#> 11 -1500 -1400           0
#> 12 -1400 -1300           0
#> 13 -1300  -800           0
#> 14 -1300 -1200           0
#> 15 -1200 -1050           0
#> 16 -1200 -1100           0
#> 17 -1100 -1050           0
#> 18 -1050  -800           0
#> 19 -1050  -950           0
#> 20  -950  -800           0
#> 21  -800   -15           0
#> 22  -800  -450           0
#> 23  -800  -620           0
#> 24  -800  -650           0
#> 25  -800  -725           0
#> 26  -725  -650           0
#> 27  -650  -620           0
#> 28  -620  -450           0
#> 29  -620  -530           0
#> 30  -530  -510           0
#> 31  -510  -450           0
#> 32  -450   -15           0
#> 33  -450  -250           0
#> 34  -450  -380           0
#> 35  -380  -250           0
#> 36  -380  -320           0
#> 37  -320  -250           0
#> 38  -250  -150           0
#> 39  -250  -200           0
#> 40  -200  -150           0
#> 41  -150   -15           0
#> 42  -150   -85           0
#> 43  -150  -125           0
#> 44  -125   -85           0
#> 45   -85   -15           0
#> 46   -85   -45           0
#> 47   -45   -15           0
#> 48   -15   300           0
#> 49   300  2000           0
#>    end_error
#> 1          0
#> 2          0
#> 3          0
#> 4          0
#> 5          0
#> 6          0
#> 7          0
#> 8          0
#> 9          0
#> 10         0
#> 11         0
#> 12         0
#> 13         0
#> 14         0
#> 15         0
#> 16         0
#> 17         0
#> 18         0
#> 19         0
#> 20         0
#> 21         0
#> 22         0
#> 23         0
#> 24         0
#> 25         0
#> 26         0
#> 27         0
#> 28         0
#> 29         0
#> 30         0
#> 31         0
#> 32         0
#> 33         0
#> 34         0
#> 35         0
#> 36         0
#> 37         0
#> 38         0
#> 39         0
#> 40         0
#> 41         0
#> 42         0
#> 43         0
#> 44         0
#> 45         0
#> 46         0
#> 47         0
#> 48         0
#> 49         0
#>                                                                                                                                                                                                                                                                                       description
#> 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                                                                                                                                                                                                                                                              = C0 nach Pare 1991,  Hennig 1995
#> 26                                                                                                                                                                                                                                                                                               
#> 27                                                                                                                                                                                                                                                                                               
#> 28 C-D Übergang 685 and 655 cal BC nach Rose, H.A., Müller-Scheeßel, N., Meadows, J. et al. Radiocarbon dating and Hallstatt chronology: a Bayesian chronological model for the burial sequence at Dietfurt an der Altmühl ‘Tennisplatz’, Bavaria, Germany. Archaeol Anthropol Sci 14, 72 (2022).
#> 29                                                                                                                                                                                                                                                                  Bevölkerungsmaximum Heuneburg
#> 30                                                                                                                                                                                                                                                                              Kollaps Heuneburg
#> 31                                                                                                                                                                                                                   Niedergang der Heuneburg, Blüte des Mt. Lassois, des Hohenasperg und des Ipf
#> 32                                                                                                                                                                                                                                                                                               
#> 33                                                                                                                                                                                                                                                                                               
#> 34                                                                                                                                                                                                                                                                     v. Chr. Blüte des Glauberg
#> 35                                                                                                                                                                                                                                                                                               
#> 36                                                                                                                                                                                                                                                                                               
#> 37                                                                                                                                                                                                                                                                                               
#> 38                                                                                                                                                                                                                                                                                               
#> 39                                                                                                                                                                                                                                                                                               
#> 40                                                                                                                                                                                                                                                                                               
#> 41                                                                                                                                                                                                                                                                                               
#> 42                                                                                                                                                                                                                                                                                               
#> 43                                                                                                                                                                                                                                                                                               
#> 44                                                                                                                                                                                                                                                                                               
#> 45                                                                                                                                                                                                                                                                                               
#> 46                                                                                                                                                                                                                                                                                               
#> 47                                                                                                                                                                                                                                                                                               
#> 48                                                                                                                                                                                                                                                                                               
#> 49                                                                                                                                                                                                                                                                                               
#>    links comment
#> 1     NA      NA
#> 2     NA      NA
#> 3     NA      NA
#> 4     NA      NA
#> 5     NA      NA
#> 6     NA      NA
#> 7     NA      NA
#> 8     NA      NA
#> 9     NA      NA
#> 10    NA      NA
#> 11    NA      NA
#> 12    NA      NA
#> 13    NA      NA
#> 14    NA      NA
#> 15    NA      NA
#> 16    NA      NA
#> 17    NA      NA
#> 18    NA      NA
#> 19    NA      NA
#> 20    NA      NA
#> 21    NA      NA
#> 22    NA      NA
#> 23    NA      NA
#> 24    NA      NA
#> 25    NA      NA
#> 26    NA      NA
#> 27    NA      NA
#> 28    NA      NA
#> 29    NA      NA
#> 30    NA      NA
#> 31    NA      NA
#> 32    NA      NA
#> 33    NA      NA
#> 34    NA      NA
#> 35    NA      NA
#> 36    NA      NA
#> 37    NA      NA
#> 38    NA      NA
#> 39    NA      NA
#> 40    NA      NA
#> 41    NA      NA
#> 42    NA      NA
#> 43    NA      NA
#> 44    NA      NA
#> 45    NA      NA
#> 46    NA      NA
#> 47    NA      NA
#> 48    NA      NA
#> 49    NA      NA
#> 
#> $cref_fortNE
#>    c_system id p_id c_level
#> 1    fortNE  1    0       1
#> 2    fortNE  2    1       2
#> 3    fortNE  3    2       3
#> 4    fortNE  4    3       4
#> 5    fortNE  5    3       4
#> 6    fortNE  6    3       4
#> 7    fortNE  7    2       3
#> 8    fortNE  8    7       4
#> 9    fortNE  9    7       4
#> 10   fortNE 10    1       2
#> 11   fortNE 11   10       3
#> 12   fortNE 12   11       4
#> 13   fortNE 13   12       5
#> 14   fortNE 14   12       5
#> 15   fortNE 15   12       5
#> 16   fortNE 16   15       6
#> 17   fortNE 17   15       6
#> 18   fortNE 18   11       4
#> 19   fortNE 19   18       5
#> 20   fortNE 20   18       5
#> 21   fortNE 21   18       5
#> 22   fortNE 22   18       5
#> 23   fortNE 23   10       3
#> 24   fortNE 24   10       3
#> 25   fortNE 25   10       3
#> 26   fortNE 26   25       4
#> 27   fortNE 27   25       4
#>    c_order
#> 1        1
#> 2        1
#> 3        1
#> 4        1
#> 5        2
#> 6        3
#> 7        2
#> 8        4
#> 9        5
#> 10       2
#> 11       1
#> 12       1
#> 13       1
#> 14       2
#> 15       3
#> 16       1
#> 17       2
#> 18       2
#> 19       1
#> 20       2
#> 21       3
#> 22       4
#> 23       3
#> 24       4
#> 25       5
#> 26       1
#> 27       2
#>                                       chronstring
#> 1                                     fortNE_Vorg
#> 2                                  fortNE_Vorg>BA
#> 3                          fortNE_Vorg>BA>olderBA
#> 4                     fortNE_Vorg>BA>olderBA>Per1
#> 5                     fortNE_Vorg>BA>olderBA>Per2
#> 6                     fortNE_Vorg>BA>olderBA>Per3
#> 7                        fortNE_Vorg>BA>youngerBA
#> 8                   fortNE_Vorg>BA>youngerBA>Per4
#> 9                   fortNE_Vorg>BA>youngerBA>Per5
#> 10                                 fortNE_Vorg>IA
#> 11                            fortNE_Vorg>IA>PRIA
#> 12                      fortNE_Vorg>IA>PRIA>PRIA1
#> 13                 fortNE_Vorg>IA>PRIA>PRIA1>Per6
#> 14               fortNE_Vorg>IA>PRIA>PRIA1>PRIA1A
#> 15               fortNE_Vorg>IA>PRIA>PRIA1>PRIA1B
#> 16   fortNE_Vorg>IA>PRIA>PRIA1>PRIA1B>olderPRIA1b
#> 17 fortNE_Vorg>IA>PRIA>PRIA1>PRIA1B>youngerPRIA1b
#> 18                      fortNE_Vorg>IA>PRIA>PRIA2
#> 19               fortNE_Vorg>IA>PRIA>PRIA2>PRIA2A
#> 20               fortNE_Vorg>IA>PRIA>PRIA2>PRIA2B
#> 21               fortNE_Vorg>IA>PRIA>PRIA2>PRIA2C
#> 22               fortNE_Vorg>IA>PRIA>PRIA2>PRIA2D
#> 23                             fortNE_Vorg>IA>Rom
#> 24                             fortNE_Vorg>IA>Mig
#> 25                             fortNE_Vorg>IA>Med
#> 26                        fortNE_Vorg>IA>Med>EMed
#> 27                      fortNE_Vorg>IA>Med>Viking
#>       name_short
#> 1           Vorg
#> 2             BA
#> 3        olderBA
#> 4           Per1
#> 5           Per2
#> 6           Per3
#> 7      youngerBA
#> 8           Per4
#> 9           Per5
#> 10            IA
#> 11          PRIA
#> 12         PRIA1
#> 13          Per6
#> 14        PRIA1A
#> 15        PRIA1B
#> 16   olderPRIA1b
#> 17 youngerPRIA1b
#> 18         PRIA2
#> 19        PRIA2A
#> 20        PRIA2B
#> 21        PRIA2C
#> 22        PRIA2D
#> 23           Rom
#> 24           Mig
#> 25           Med
#> 26          EMed
#> 27        Viking
#>                 name_long start
#> 1           Vorgeschichte -1800
#> 2              Bronzezeit -1800
#> 3                         -1800
#> 4               Periode I -1800
#> 5              Periode II -1500
#> 6             Periode III -1300
#> 7                         -1100
#> 8              Periode IV -1100
#> 9               Periode V  -950
#> 10              Eisenzeit  -750
#> 11    Pre-Roman Iron Age   -750
#> 12                 PRIA_I  -750
#> 13             Periode VI  -750
#> 14               PRIA_IA   -525
#> 15                PRIA_IB  -450
#> 16         Ältere PRIA_IB  -450
#> 17       Jüngere PRIA_IB   -350
#> 18                PRIA_II  -250
#> 19              PRIA_IIA   -250
#> 20              PRIA_IIB   -200
#> 21              PRIA_IIC    -80
#> 22              PRIA_IID    -50
#> 23    Römische Kaiserzeit     0
#> 24       Migration Period   375
#> 25        Medieval Period   550
#> 26 Eearly Medieval Period   550
#> 27          Viking Period   750
#>      end start_error end_error
#> 1   1050           0         0
#> 2   -750           0         0
#> 3  -1100           0         0
#> 4  -1500           0         0
#> 5  -1300           0         0
#> 6  -1100           0         0
#> 7   -750           0         0
#> 8   -950           0         0
#> 9   -750           0         0
#> 10  1050           0         0
#> 11     0           0         0
#> 12  -250           0         0
#> 13  -525           0         0
#> 14  -450           0         0
#> 15  -250           0         0
#> 16  -350           0         0
#> 17  -250           0         0
#> 18     0           0         0
#> 19  -200           0         0
#> 20   -80           0         0
#> 21   -50           0         0
#> 22     0           0         0
#> 23   375           0         0
#> 24   550           0         0
#> 25  1050           0         0
#> 26   750           0         0
#> 27  1050           0         0
#>                                                                                                                                                   description
#> 1                                                                                                                                                            
#> 2                                                                                                                                                            
#> 3                                                                                                                                                            
#> 4                                                                                                                                                            
#> 5                                                                                                                                                            
#> 6                                                                                                                                                            
#> 7                                                                                                                                                            
#> 8                                                                                                                                                Ha B1-Ha B2 
#> 9                                                                                                                                Ha B3 Kneisel B3-C1 850-725 
#> 10                                                                                                                                                           
#> 11                                                                                                                                                           
#> 12                                                                                                                                                           
#> 13                                                                                          = ha c ha D1, Hingst Ia, Nortmann Horizont 1, wessenstedt kneisel
#> 14 Hingst Ib-Ic1; Ha D2-Ha D3; Nortmann Horizont 2; lt Eichfeld: Harck 1a = Heynowski Wendelring d = Ha D1 und Harck 1b = Ha D2 und Harck 1c = Ha D3 und Lt A
#> 15                                                                                         Hingst Ic2-Id; Nortmann Horizont 3-4; lt Eichfeld: Harck 1d = Lt B
#> 16                                                                                                                 Martens/Hingst; = Hingst Ic-Id; Lt A-LtB1 
#> 17                                                                                                                     Martens/Hingst; = Hingst Id; Lt B1-B2 
#> 18                                                                                                                             Hingst II; Nortmann Horizont 5
#> 19                                                                                                                                Hingst IIa, Hingst = Lt C1 
#> 20                                                                                                                        Hingst IIb, Hingst = Lt C2- 200-80 
#> 21                                                                                                                                               Hingst IIc, 
#> 22                                                                                                                                               Hingst IId, 
#> 23                                                                                                                                                           
#> 24                                                                                                                                                           
#> 25                                                                                                                                                           
#> 26                                                                                                                                                           
#> 27                                                                                                                                                           
#>    links comment
#> 1     NA      NA
#> 2     NA      NA
#> 3     NA      NA
#> 4     NA      NA
#> 5     NA      NA
#> 6     NA      NA
#> 7     NA      NA
#> 8     NA      NA
#> 9     NA      NA
#> 10    NA      NA
#> 11    NA      NA
#> 12    NA      NA
#> 13    NA      NA
#> 14    NA      NA
#> 15    NA      NA
#> 16    NA      NA
#> 17    NA      NA
#> 18    NA      NA
#> 19    NA      NA
#> 20    NA      NA
#> 21    NA      NA
#> 22    NA      NA
#> 23    NA      NA
#> 24    NA      NA
#> 25    NA      NA
#> 26    NA      NA
#> 27    NA      NA
#> 
#> $crep_fortME
#>     id fortME Vorg SZ  BA FBA
#> 1 1412      1    1  0 0.0   0
#> 2 1164      1    1  0 0.7   0
#> 3 1123      1    1  0 1.0   0
#> 4 1146      1    1  0 0.0   0
#> 5 1235      1    1  0 0.0   0
#> 6  168      0    0  0 0.0   0
#>   BzA1 BzA2 MBA BzB BzC BzC1
#> 1    0    0   0   0   0    0
#> 2    0    0   0   0   0    0
#> 3    0    0   0   0   0    0
#> 4    0    0   0   0   0    0
#> 5    0    0   0   0   0    0
#> 6    0    0   0   0   0    0
#>   BzC2 SBA  BzD  HaA HaA1 HaA2
#> 1    0 0.0 0.00 0.00 0.00 0.00
#> 2    0 0.7 0.14 0.21 0.14 0.07
#> 3    0 1.0 0.00 1.00 0.00 1.00
#> 4    0 0.0 0.00 0.00 0.00 0.00
#> 5    0 0.0 0.00 0.00 0.00 0.00
#> 6    0 0.0 0.00 0.00 0.00 0.00
#>    HaB HaB1 HaB2.3  IA  Ha HaC
#> 1 0.00 0.00   0.00 1.0 0.0   0
#> 2 0.35 0.14   0.21 0.7 0.7   0
#> 3 1.00 1.00   0.00 1.0 1.0   0
#> 4 0.00 0.00   0.00 1.0 0.0   0
#> 5 0.00 0.00   0.00 1.0 0.0   0
#> 6 0.00 0.00   0.00 0.0 0.0   0
#>   HaC1 HaC1a HaC1b HaC2 HaD
#> 1    0     0     0    0 0.0
#> 2    0     0     0    0 0.7
#> 3    0     0     0    0 1.0
#> 4    0     0     0    0 0.0
#> 5    0     0     0    0 0.0
#> 6    0     0     0    0 0.0
#>        HaD1       HaD2      HaD3
#> 1 0.0000000 0.00000000 0.0000000
#> 2 0.3705882 0.08235294 0.2470588
#> 3 0.5294118 0.11764706 0.3529412
#> 4 0.0000000 0.00000000 0.0000000
#> 5 0.0000000 0.00000000 0.0000000
#> 6 0.0000000 0.00000000 0.0000000
#>   Lt Flt   LtA   LtB LtB1  LtB2
#> 1  1 1.0 0.350 0.650 0.30 0.350
#> 2  0 0.0 0.000 0.000 0.00 0.000
#> 3  1 1.0 1.000 0.000 0.00 0.000
#> 4  1 0.5 0.175 0.325 0.15 0.175
#> 5  1 0.7 0.700 0.000 0.00 0.000
#> 6  0 0.0 0.000 0.000 0.00 0.000
#>   LtC LtC1 LtC2 LtD      LtD1
#> 1   1  0.5  0.5   1 0.4814815
#> 2   0  0.0  0.0   0 0.0000000
#> 3   0  0.0  0.0   0 0.0000000
#> 4   0  0.0  0.0   1 0.4814815
#> 5   0  0.0  0.0   1 0.4814815
#> 6   0  0.0  0.0   0 0.0000000
#>       LtD1a     LtD1b      LtD2
#> 1 0.1851852 0.2962963 0.5185185
#> 2 0.0000000 0.0000000 0.0000000
#> 3 0.0000000 0.0000000 0.0000000
#> 4 0.1851852 0.2962963 0.5185185
#> 5 0.1851852 0.2962963 0.5185185
#> 6 0.0000000 0.0000000 0.0000000
#>       LtD2a     LtD2b Rom MANZ
#> 1 0.2962963 0.2222222   0    0
#> 2 0.0000000 0.0000000   0    0
#> 3 0.0000000 0.0000000   0    0
#> 4 0.2962963 0.2222222   1    0
#> 5 0.2962963 0.2222222   1    0
#> 6 0.0000000 0.0000000   0    0
#> 
#> $crep_fortNE
#>     id Vorg BA olderBA Per1 Per2
#> 1 1412    0  0       0    0    0
#> 2 1164    0  0       0    0    0
#> 3 1123    0  0       0    0    0
#> 4 1146    0  0       0    0    0
#> 5 1235    0  0       0    0    0
#> 6  168    1  0       0    0    0
#>   Per3 youngerBA Per4 Per5 IA
#> 1    0         0    0    0  0
#> 2    0         0    0    0  0
#> 3    0         0    0    0  0
#> 4    0         0    0    0  0
#> 5    0         0    0    0  0
#> 6    0         0    0    0  1
#>   PRIA PRIA1 Per6 PRIA1A PRIA1B
#> 1    0     0    0      0      0
#> 2    0     0    0      0      0
#> 3    0     0    0      0      0
#> 4    0     0    0      0      0
#> 5    0     0    0      0      0
#> 6    1     0    0      0      0
#>   olderPRIA1b youngerPRIA1b
#> 1           0             0
#> 2           0             0
#> 3           0             0
#> 4           0             0
#> 5           0             0
#> 6           0             0
#>   PRIA2 PRIA2A PRIA2B PRIA2C
#> 1     0      0      0      0
#> 2     0      0      0      0
#> 3     0      0      0      0
#> 4     0      0      0      0
#> 5     0      0      0      0
#> 6     1      0      0      0
#>   PRIA2D Rom Mig Med EMed Viking
#> 1      0   0   0   0    0      0
#> 2      0   0   0   0    0      0
#> 3      0   0   0   0    0      0
#> 4      0   0   0   0    0      0
#> 5      0   0   0   0    0      0
#> 6      1   0   0   0    0      0
#> 
#> $metadata
#>                                       key
#> 1                        chronsys-version
#> 2                     chronrep_created-by
#> 3                       archChron-version
#> 4                  chronrep_creation-date
#> 5                                    data
#> 6                               data-mode
#> 7                             aggregation
#> 8                                 license
#> 9                                  author
#> 10 aoristic_2026-06-12 08:23:50_operation
#> 11  aoristic_2026-06-12 08:23:50_aoristic
#> 12 aoristic_2026-06-12 08:23:50_selection
#> 13  aoristic_2026-06-12 08:23:50_affected
#> 14      aoristic_2026-06-12 08:23:50_note
#>                                                                value
#> 1                                                                 NA
#> 2                                                          archChron
#> 3                                                          2026.6.12
#> 4                                                         2026-06-12
#> 5                                                         local file
#> 6                                                           original
#> 7                                                                max
#> 8                                     same as data and chronref-data
#> 9                                                                 NN
#> 10                                           chron_chronrep_aoristic
#> 11                                                              temp
#> 12                                                        subset=all
#> 13                                          fortME(n=6); fortNE(n=6)
#> 14 top-down, condition: all siblings == 0; bottom-up pass, eps=1e-05
#> 
#> $subsets_fortME
#>     id  all     x
#> 1 1412 TRUE FALSE
#> 2 1164 TRUE FALSE
#> 3 1123 TRUE FALSE
#> 4 1146 TRUE FALSE
#> 5 1235 TRUE FALSE
#> 6  168 TRUE FALSE
#> 
#> $subsets_fortNE
#>     id  all     x
#> 1 1412 TRUE FALSE
#> 2 1164 TRUE FALSE
#> 3 1123 TRUE FALSE
#> 4 1146 TRUE FALSE
#> 5 1235 TRUE FALSE
#> 6  168 TRUE FALSE

We will now re-import the generated file. The system can read RDS files, DuckDB files, and CSV files located in a dedicated folder.

cconn2 <- archChron::chron_chronrep_read(
  type = "rds", 
  source = here::here("inst", "kfd_crep.rds"))

We must remember to close any database connections that are no longer needed.

duckdb::dbDisconnect(
  conn     = cconn2, 
  shutdown = TRUE)

Advanced Search Using Chronrep Objects

A search without the above-mentioned limitations can be performed with the chron_filter_chronrep() filter function. First, we need to define a search pattern.

pattern1 <- "fortME_Vorg>EZ>Lt>LtD_0.5"

Now, we can use the search pattern within the search function. In principle, we are just comparing the pattern with the chronrep entries to generate a subset logical vector:

chronstring_pattern────decomposition────┓
                                        ┣─────────compare─────────subset (boolean vector)
chronstring_data────────chronrep────────┛
archChron::chron_filter_chronrep(
  cconn    = cconn,
  pattern  = pattern1,
  subcol   = "pattern1"
)
#>     id
#> 1 1412
#> 2 1146
#> 3 1235

The search function returns the IDs of the results and stores the result as boolean values in a dedicated column (subcol = "pattern1") in the chronrep object.

The components of the chronstring can also be provided as individual parameters instead of a complete chronstring.

archChron::chron_filter_chronrep(
  cconn    = cconn,
  c_system = "fortME",
  c_string = "LtD",
  c_value  = 0.5,
  subcol   = "pattern1b"
)
#>     id
#> 1 1412
#> 2 1146
#> 3 1235
haids <- archChron::chron_filter_chronrep(
  cconn    = cconn,
  c_system = "fortME",
  c_string = "HaD",
  c_value  = 0.5,
  subcol   = "pattern2"
)
haids
#>     id
#> 1 1164
#> 2 1123

Filtering Absolute Dates

In particular, because absolute dates establish (besides the archaeological content) the connection between different chronological systems, they are of some importance, and filtering absolute dates is a frequent task.

The absolute dates are stored in the chronology reference object and can be extracted using the chron_chronref_getabs() function.

archChron::chron_chronref_getabs(
  chron_ref       = chron_ref,
  #chronstring = NULL,
  csys        = "fortME",
  phase       = "LtD",
)
#>    start end
#> 41  -150 -15

Filtering the actual dates is possible with the chron_filter_abs() function. Please bear in mind that you must specify both a minimum probability and a specific hierarchical level within the chronological system, and that different parameters may yield different results. Whilst the probability determines the reliability of the dating, the hierarchical level determines the precision of the dating. The higher both values are, the fewer results a search will return.

archChron::chron_filter_abs(
    cconn     = cconn,
    chron_ref = chron_ref,
    pthres    = 0.5,
    clevel    = 4,
    newsubset = "allen",
    start     = -400,
    end       = 30,
    #filterid  = 1412
)
#>     id start  end
#> 1 1412  -450  -15
#> 2 1164  -620 -450
#> 3 1123 -1200 -250
#> 4 1146  -450  -15
#> 5 1235  -450  -15
#> 6  168  -250    0
#>                    allen
#> 1 phase1_overlaps_phase2
#> 2   phase1_before_phase2
#> 3 phase1_overlaps_phase2
#> 4 phase1_overlaps_phase2
#> 5 phase1_overlaps_phase2
#> 6   phase1_during_phase2
#>   intersect during
#> 1      TRUE  FALSE
#> 2     FALSE  FALSE
#> 3      TRUE  FALSE
#> 4      TRUE  FALSE
#> 5      TRUE  FALSE
#> 6      TRUE   TRUE

This function not only returns the filter result and stores the result as a subset, but also returns the time interval that is covered by a date and the temporal relationship of the data interval and the search interval as defined by Allen’s operators, provided by Allen (Allen (1983); Allen (1984); Allen/Ferguson (1994)). The Allen relationships are grouped into intersect for all kinds of interval intersection, and during for all cases where the data interval does not exceed the search interval.

For large datasets, an optimised version might be useful. We are applying this version, which has the same parameters with the filterid parameter. Even if start and end are provided, filterid is used to define the search interval because this parameter overwrites the other two.

archChron::chron_filter_abs_duck(
    cconn     = cconn,
    chron_ref = chron_ref,
    pthres    = 0.5,
    clevel    = 4,
    newsubset = "allen",
    start     = -400,
    end       = 30,
    filterid  = 1412
)
#>     id start  end
#> 1 1412  -450  -15
#> 2 1123 -1200 -250
#> 3  168  -250    0
#> 4 1164  -620 -450
#> 5 1146  -450  -15
#> 6 1235  -450  -15
#>                         allen
#> 1         phase1_equal_phase2
#> 2      phase1_overlaps_phase2
#> 3 phase1_overlapped-by_phase2
#> 4         phase1_meets_phase2
#> 5         phase1_equal_phase2
#> 6         phase1_equal_phase2
#>   intersect during
#> 1      TRUE   TRUE
#> 2      TRUE  FALSE
#> 3      TRUE  FALSE
#> 4     FALSE  FALSE
#> 5      TRUE   TRUE
#> 6      TRUE   TRUE

Subsets

By filtering, we have created subsets. Recall the haids we produced above. Subsets are named Boolean vectors that store a selection of dates. “x” is the default subset as a dynamic storage location, but any other name can be assigned. Subsets are used to continue working with the selected data and to work with the selections themselves. They provide efficient access to groups of dates. A subset can only be defined for one or more chronology systems. It is therefore possible, where necessary, to manage multiple datasets from different chronology systems together using a single subset.

The IDs of subsets stored in the cconn can be obtained with the chron_filter_subset_returnid() function.

archChron::chron_filter_subset_returnid(
    cconn  = cconn,
    subset = "x"
)
#>     id chronsysname
#> 1 1164       fortME
#> 2 1123       fortME

We can use the returned IDs to filter the original dataframe.

archChron::fort_main_sites[archChron::fort_main_sites$id_main %in% haids[,1],]
#>   id_main
#> 2    1123
#> 4    1164
#>                                   uuid
#> 2 a18878d8-3152-11eb-bf63-80fa5b292ca1
#> 4 a1887cde-3152-11eb-bf63-80fa5b292ca1
#>   uuid_parents
#> 2         root
#> 4         root
#>                   name class
#> 2  Koblenz, Dommelberg  site
#> 4 Burgen, Druidenstein  site
#>                                            type
#> 2 (c132,33(c1,3))(c132,3(c1,3⊂(c132,32(c1,3))))
#> 4                                           bu1
#>                                                                                                                        chron
#> 2 fortME_Vorg>BA>SBA>HaA>HaA2_1.0, fortME_Vorg>BA>SBA>HaB>HaB1_1.0, fortME_Vorg>IA>Ha>HaD_1.0, fortME_Vorg>IA>Lt>Flt>LtA_1.0
#> 4                                                                          fortME_Vorg>BA>SBA_0.7, fortME_Vorg>IA>Ha>HaD_0.7
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             comment
#> 2 Halbringwälle um zwei benachbarte Kuppen am Steilhang zum Rhein. Die Nördliche Kuppe ist mit drei Halbkreiswällen umgeben, von denen der mittlere eine kleine Erweiterung nach N besitzt. Die südliche Kuppe ist mit einem Wall umgeben, der an den äußeren Wall der nördlichen Anlage Anschließt. Innerhalb dessen finden sich Grabenreste eines weiteren Walls und am Steilhang zwischen beiden Kuppen  ist eine wohl künstliche Stufe zu erkennen. Grabungen wurden von Bodewig 1898-1899 und von K. H. Wagner 1936-1937 durchgeführt und von Joachim 1977 publiziert. Die Anlage umfasst etwa 130000 qm und liegt gegenüber der Mündung der Lahn. Soweit ergraben scheint es sich um Pfostenschlitzmauern von 3-6 m Breite zu handeln. Es sind 2 Bauphasen festzustellen. Das Trockenmauerwerk ist stellenweise bis 1 m Höhe erhalten. Es wurde ein Tor untersucht, das zwei Fundamentgräben mit Pfostenlöchern aufweist. Die Torkammer ist 4 m breit und  5,4 m lang. Vor dem Tor befand sich eine Graben, vermutlich mit Brücke. Vermessung 1936 durch Hilden/Schuh. Funde: Keramik, 2 Spinnwirtelfragmente, Hütztenlehm, 2 Rollenkopnadeln (Br), Lanzenspitzenfragmente (Fe), Ringfragmente (Br), Tierknochen, vereinzelt Menschenknochen.
#> 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Massiver Abschnittswall mit vorgelagertem Graben. 8-9 Fuß breite Trockenmauer. Oberflächenfunde der UK und HEK I, Grabung 1893
#>                                                                                                                                                                                                       source
#> 2 Bodewig 1900; Cohausen 1858; Hopstätter 1968; Joachim 1968; 1977; Jockenhövel 1974; Nortmann 1999, Nr. 9; Reichstein 1977; Schumacher 1916; 1917; Uslar 1953; 1964; Wagner 1937; v. Berg 2006; Wegner 1986
#> 4                                                                                v. Berg 1987, I, 299 f; II, 38 Nr. 46; Gilles 1985; Kapelle 1993, 92, 155; RheinZeitung 06.12.1956; RheinZeitung 22.11.1985
#>   location_q chron_q info_q
#> 2          3       3      3
#> 4          3       2      2
#>                                         WKT
#> 2 POINT (399219.797194271 5575020.57982703)
#> 4   POINT (384221.49504536 5561079.4090466)

The chron_filter_apply() function is perhaps more convenient.

archChron::chron_filter_apply(
  data         = archChron::fort_main_sites,
  cconn        = cconn,
  chronsysname = "all",
  idcol        = "id_main",
  ids          = haids,
)
#>   id_main
#> 2    1123
#> 4    1164
#>                                   uuid
#> 2 a18878d8-3152-11eb-bf63-80fa5b292ca1
#> 4 a1887cde-3152-11eb-bf63-80fa5b292ca1
#>   uuid_parents
#> 2         root
#> 4         root
#>                   name class
#> 2  Koblenz, Dommelberg  site
#> 4 Burgen, Druidenstein  site
#>                                            type
#> 2 (c132,33(c1,3))(c132,3(c1,3⊂(c132,32(c1,3))))
#> 4                                           bu1
#>                                                                                                                        chron
#> 2 fortME_Vorg>BA>SBA>HaA>HaA2_1.0, fortME_Vorg>BA>SBA>HaB>HaB1_1.0, fortME_Vorg>IA>Ha>HaD_1.0, fortME_Vorg>IA>Lt>Flt>LtA_1.0
#> 4                                                                          fortME_Vorg>BA>SBA_0.7, fortME_Vorg>IA>Ha>HaD_0.7
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             comment
#> 2 Halbringwälle um zwei benachbarte Kuppen am Steilhang zum Rhein. Die Nördliche Kuppe ist mit drei Halbkreiswällen umgeben, von denen der mittlere eine kleine Erweiterung nach N besitzt. Die südliche Kuppe ist mit einem Wall umgeben, der an den äußeren Wall der nördlichen Anlage Anschließt. Innerhalb dessen finden sich Grabenreste eines weiteren Walls und am Steilhang zwischen beiden Kuppen  ist eine wohl künstliche Stufe zu erkennen. Grabungen wurden von Bodewig 1898-1899 und von K. H. Wagner 1936-1937 durchgeführt und von Joachim 1977 publiziert. Die Anlage umfasst etwa 130000 qm und liegt gegenüber der Mündung der Lahn. Soweit ergraben scheint es sich um Pfostenschlitzmauern von 3-6 m Breite zu handeln. Es sind 2 Bauphasen festzustellen. Das Trockenmauerwerk ist stellenweise bis 1 m Höhe erhalten. Es wurde ein Tor untersucht, das zwei Fundamentgräben mit Pfostenlöchern aufweist. Die Torkammer ist 4 m breit und  5,4 m lang. Vor dem Tor befand sich eine Graben, vermutlich mit Brücke. Vermessung 1936 durch Hilden/Schuh. Funde: Keramik, 2 Spinnwirtelfragmente, Hütztenlehm, 2 Rollenkopnadeln (Br), Lanzenspitzenfragmente (Fe), Ringfragmente (Br), Tierknochen, vereinzelt Menschenknochen.
#> 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Massiver Abschnittswall mit vorgelagertem Graben. 8-9 Fuß breite Trockenmauer. Oberflächenfunde der UK und HEK I, Grabung 1893
#>                                                                                                                                                                                                       source
#> 2 Bodewig 1900; Cohausen 1858; Hopstätter 1968; Joachim 1968; 1977; Jockenhövel 1974; Nortmann 1999, Nr. 9; Reichstein 1977; Schumacher 1916; 1917; Uslar 1953; 1964; Wagner 1937; v. Berg 2006; Wegner 1986
#> 4                                                                                v. Berg 1987, I, 299 f; II, 38 Nr. 46; Gilles 1985; Kapelle 1993, 92, 155; RheinZeitung 06.12.1956; RheinZeitung 22.11.1985
#>   location_q chron_q info_q
#> 2          3       3      3
#> 4          3       2      2
#>                                         WKT
#> 2 POINT (399219.797194271 5575020.57982703)
#> 4   POINT (384221.49504536 5561079.4090466)

This function also allows using the stored selection by name.

archChron::chron_filter_apply(
  data         = archChron::fort_main_sites,
  cconn        = cconn,
  chronsysname = "all",
  idcol        = "id_main",
  subcolname   = "pattern1"
)
#>   id_main
#> 3    1146
#> 5    1235
#> 6    1412
#>                                   uuid
#> 3 a1887b30-3152-11eb-bf63-80fa5b292ca1
#> 5 dc925568-0efe-11ec-8e45-d8cb8a6956d3
#> 6 9aee8c4a-0f0c-11ec-8e45-d8cb8a6956d3
#>   uuid_parents
#> 3         root
#> 5         root
#> 6         root
#>                     name class
#> 3      Pommern, Martberg  site
#> 5 Hunnenring / Otzhausen  site
#> 6   Altburg / Bundenbach  site
#>                        type
#> 3 b1(b1((<d132,3)(d132,3)))
#> 5             (cp134⊂dp134)
#> 6        ((<bv134)(bv134>))
#>                                                                             chron
#> 3            fortME_Vorg>IA>Lt>LtD_1.0, fortME_Vorg>IA>Lt>Flt_0.5, fortME_Rom_1.0
#> 5         fortME_Vorg>IA>Lt>Flt>LtA_0.7,fortME_Vorg>IA>Lt>LtD_1.0, fortME_Rom_1.0
#> 6 fortME_Vorg>IA>Lt>Flt_1.0, fortME_Vorg>IA>Lt>LtC_1.0, fortME_Vorg>IA>Lt>LtD_1.0
#>                                                                   comment
#> 3 Keltisches Oppidum, umfangreiche Ausgrabungen im 19., 20. und 21. Jh. .
#> 5                                                                        
#> 6                                                                        
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               source
#> 3 A. v. Berg 1990; 2006; Eiden 1967; Gilles 1988; 1990; Wegner 1987; 1990; 1997;  A. Haffner, Der Mart- und Hüttenberg bei Pommern/Karden, ein Oppidum im östlichen Treverergebiet. In: A. Haffner, Trier, Augustusstadt der Treverer (Mainz 1984) 106–111. M. Thoma, Der gallorömische Tempelbezirk auf dem Martberg bei Pommern an der Mosel (Koblenz 2006). C. Nickel, Martin Thoma u. David Wigg-Wolf, Martberg: Heiligtum und Oppidum der Treverer. Berichte zur Archäologie an Mittelrhein und Mosel 14 (Koblenz 2008). J. Klein, Der Martberg bei Pommern an der Mosel und seine Kultstätte. Bonner Jahrb. 101, 1897, 62–116. C. Nickel, Die spätkeltisch-frührömische Siedlung im Oppidum auf dem Martberg (Lkr. Cochem-Zell, Rheinland-Pfalz). In: Martin Schönfelder, Susanne Sievers (Hrsg.), L’age du fer entre la Champagne et la Vallée du Rhin. – Die Eisenzeit zwischen Champagne und Rheintal. Verlag des Römisch-Germanischen Zentralmuseums (Mainz 2012) 291–336.
#> 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Schindler1968; Wiegert 2002
#> 6                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Koch 1994
#>   location_q chron_q info_q
#> 3          3       3      3
#> 5          2       2      3
#> 6          2       3      3
#>                                                          WKT
#> 3                  POINT (377672.772359804 5559859.15401979)
#> 5  POINT (355699.83147819247096777 5498376.0141177186742425)
#> 6 POINT (384408.55165560246678069 5523033.77912799920886755)

While chron_filter_apply() applies a subset to the data, chron_filter_subsetdata() creates a subset based on the data or the direct input of a Boolean vector. Please note that parameters that are not required have to be NULL.

First, we will insert a prepared logical vector.

archChron::chron_filter_subsetdata(
  cconn        = cconn,
  chronsysname = "fortME",
  vector       = c(FALSE,  TRUE, FALSE, FALSE, FALSE, TRUE),  
  dataframe    = NULL,
  pattern      = NULL,  
  set          = NULL,  
  subcol       = "random",
  col          = "id",
  regex        = "simple"  
)
#> [1] FALSE  TRUE FALSE FALSE FALSE
#> [6]  TRUE

Now, we are searching for a certain word in the name column.

archChron::chron_filter_subsetdata(
  cconn        = cconn,
  chronsysname = "fortME",
  vector       = NULL,  
  dataframe    = archChron::fort_main_sites,
  pattern      = "Dommelberg",  
  set          = NULL,  
  subcol       = "Dommelberg",
  col          = "name",
  regex        = "simple"  
)
#> [1] FALSE  TRUE FALSE FALSE FALSE
#> [6] FALSE

If required, regular expressions can be used.

Our next approach is to mark all entries with values in a defined vector of values.

archChron::chron_filter_subsetdata(
  cconn        = cconn,
  chronsysname = "fortME",
  vector       = NULL,  
  dataframe    = archChron::fort_main_sites,
  pattern      = NULL,  
  set          = c(168, 1123, 1412),  
  subcol       = "mainrandom",
  col          = "id_main",
  regex        = "simple"  
)
#> [1]  TRUE  TRUE FALSE FALSE FALSE
#> [6]  TRUE

The function chron_filter_subsetdata() allows involving data queries in subset operations. The function chron_filter_subsetoperations() provides operators for subsets that, for instance, can be applied before applying the filter to the data. The inversion (negation) is so far the only unary operator.

archChron::chron_filter_subsetoperations(
  cconn        = cconn,
  chronsysname = "fortME",
  subcol       = c("pattern1"),
  newcol       = "pattern1inv",
  operator     = "negation"
)
#>       x
#> 1 FALSE
#> 2  TRUE
#> 3  TRUE
#> 4 FALSE
#> 5 FALSE
#> 6  TRUE

The binary operators are:

archChron::chron_filter_subsetoperations(
  cconn        = cconn,
  chronsysname = "fortME",
  subcol       = c("pattern1", "pattern2"),
  newcol       = "pattern12",
  operator     = "union"
)
#>       x
#> 1  TRUE
#> 2  TRUE
#> 3  TRUE
#> 4  TRUE
#> 5  TRUE
#> 6 FALSE

Sometimes, binary operators have to be applied in an iterative way to more than two selections. This can be done with the chron_filter_subsetoperations_mult() function.

archChron::chron_filter_subsetoperations_mult(
  cconn        = cconn,
  chronsysname = "fortME",
  subcol       =  c("pattern1", "pattern1b", "pattern2"),
  newcol       = "x",
  operator     = "union"
)
#>       x
#> 1  TRUE
#> 2  TRUE
#> 3  TRUE
#> 4  TRUE
#> 5  TRUE
#> 6 FALSE

Some standard operations on subsets are available via chron_filter_subsets(). The operations are:

Listing the tables shows that the chronrep object comprises chronref tables, corresponding subset tables, and metadata

archChron::chron_filter_subsets(
  cconn = cconn, 
  method = "st")
#>             name
#> 1    cref_fortME
#> 2    cref_fortNE
#> 3    crep_fortME
#> 4    crep_fortNE
#> 5       metadata
#> 6 subsets_fortME
#> 7 subsets_fortNE

We can also list the columns in the subset table.

archChron::chron_filter_subsets(
  cconn = cconn, 
  table = "subsets_fortME", 
  method = "sc")
#>        column_name column_type
#> 1               id     VARCHAR
#> 2              all     BOOLEAN
#> 3                x     BOOLEAN
#> 4         pattern1     BOOLEAN
#> 5        pattern1b     BOOLEAN
#> 6         pattern2     BOOLEAN
#> 7  allen_intersect     BOOLEAN
#> 8     allen_during     BOOLEAN
#> 9           random     BOOLEAN
#> 10      Dommelberg     BOOLEAN
#> 11      mainrandom     BOOLEAN
#> 12     pattern1inv     BOOLEAN
#> 13       pattern12     BOOLEAN
#>    null  key default extra
#> 1   YES <NA>    <NA>  <NA>
#> 2   YES <NA>    <NA>  <NA>
#> 3   YES <NA>    <NA>  <NA>
#> 4   YES <NA>    <NA>  <NA>
#> 5   YES <NA>    <NA>  <NA>
#> 6   YES <NA>    <NA>  <NA>
#> 7   YES <NA>    <NA>  <NA>
#> 8   YES <NA>    <NA>  <NA>
#> 9   YES <NA>    <NA>  <NA>
#> 10  YES <NA>    <NA>  <NA>
#> 11  YES <NA>    <NA>  <NA>
#> 12  YES <NA>    <NA>  <NA>
#> 13  YES <NA>    <NA>  <NA>

We created the pattern columns earlier; all and x are the two default columns where all selects all items and x is a flexible selection. The number and percentage of the selection can be inspected using the “stat” operation.

archChron::chron_filter_subsets(
  cconn = cconn, 
  table = "subsets_fortME", 
  subcol = "pattern1", 
  method = "stat")
#>   selected total percentage
#> 1        3     6         50

The “vtc” operation shows the content of the selected table.

archChron::chron_filter_subsets(
  cconn  = cconn, 
  table  = "subsets_fortME", 
  method = "vtc")
#>     id  all     x pattern1
#> 1 1412 TRUE  TRUE     TRUE
#> 2 1164 TRUE  TRUE    FALSE
#> 3 1123 TRUE  TRUE    FALSE
#> 4 1146 TRUE  TRUE     TRUE
#> 5 1235 TRUE  TRUE     TRUE
#> 6  168 TRUE FALSE    FALSE
#>   pattern1b pattern2
#> 1      TRUE    FALSE
#> 2     FALSE     TRUE
#> 3     FALSE     TRUE
#> 4      TRUE    FALSE
#> 5      TRUE    FALSE
#> 6     FALSE    FALSE
#>   allen_intersect allen_during
#> 1            TRUE         TRUE
#> 2           FALSE        FALSE
#> 3            TRUE        FALSE
#> 4            TRUE         TRUE
#> 5            TRUE         TRUE
#> 6            TRUE        FALSE
#>   random Dommelberg mainrandom
#> 1  FALSE      FALSE       TRUE
#> 2   TRUE       TRUE       TRUE
#> 3  FALSE      FALSE      FALSE
#> 4  FALSE      FALSE      FALSE
#> 5  FALSE      FALSE      FALSE
#> 6   TRUE      FALSE       TRUE
#>   pattern1inv pattern12
#> 1       FALSE      TRUE
#> 2        TRUE      TRUE
#> 3        TRUE      TRUE
#> 4       FALSE      TRUE
#> 5       FALSE      TRUE
#> 6        TRUE     FALSE

It is also possible to delete tables, but we skip this operation here. Here, we turn to the chron_dates_manage() function, which allows managing dates. The dates are selected with a subset or a vector of IDs (ID overwrites subset) in all available chronology systems. If chronsysname is set, the other systems are ignored, even if the selected IDs or subsets exist in those systems too. We can delete selected dates in a cconn, or copy, move, or extract between two cconns, or merge two cconns.

cconn3 <- archChron::chron_chronrep_create(
  chron_ref = chron_ref, 
  out       = "duckdb", 
  duckfile  = ":memory:")
archChron::chron_dates_manage(
    cconn        = cconn,
    cconn2       = cconn3,
    subset       = "x",
    #id           = NULL,
    chronsysname = "fortME",
    task         = "extract"
)
#> extract completed: 5 IDs in 2 tables processed.

Combining Dates

We can aggregate dates using one function: max, min, sum, or iprod (=1/product(1/probability))

archChron::chron_dates_combine(
  cconn        = cconn,
  chronsysname = "fortME",
  subcol       = "mainrandom",
  groupid      = "agg-2",
  agg          = "iprod"
)
#>      id fortME Vorg SZ  BA FBA
#> 1 agg-2      1    1  0 0.7   0
#>   BzA1 BzA2 MBA BzB BzC BzC1
#> 1    0    0   0   0   0    0
#>   BzC2 SBA  BzD  HaA HaA1 HaA2
#> 1    0 0.7 0.14 0.21 0.14 0.07
#>    HaB HaB1 HaB2/3  IA  Ha HaC
#> 1 0.35 0.14   0.21 0.7 0.7   0
#>   HaC1 HaC1a HaC1b HaC2 HaD
#> 1    0     0     0    0 0.7
#>        HaD1       HaD2      HaD3
#> 1 0.3705882 0.08235294 0.2470588
#>   Lt Flt  LtA  LtB LtB1 LtB2 LtC
#> 1  1   1 0.35 0.65  0.3 0.35   1
#>   LtC1 LtC2 LtD      LtD1
#> 1  0.5  0.5   1 0.4814815
#>       LtD1a     LtD1b      LtD2
#> 1 0.1851852 0.2962963 0.5185185
#>       LtD2a     LtD2b Rom MANZ
#> 1 0.2962963 0.2222222   0    0

The aggregated probabilities are returned as a vector and written into a new date inside the chronrep object.

archChron::chron_filter_subsets(
  cconn  = cconn, 
  table  = "crep_fortME", 
  method = "vtc")
#>      id fortME Vorg SZ  BA FBA
#> 1  1412      1    1  0 0.0   0
#> 2  1164      1    1  0 0.7   0
#> 3  1123      1    1  0 1.0   0
#> 4  1146      1    1  0 0.0   0
#> 5  1235      1    1  0 0.0   0
#> 6   168      0    0  0 0.0   0
#> 7 agg-2      1    1  0 0.7   0
#>   BzA1 BzA2 MBA BzB BzC BzC1
#> 1    0    0   0   0   0    0
#> 2    0    0   0   0   0    0
#> 3    0    0   0   0   0    0
#> 4    0    0   0   0   0    0
#> 5    0    0   0   0   0    0
#> 6    0    0   0   0   0    0
#> 7    0    0   0   0   0    0
#>   BzC2 SBA  BzD  HaA HaA1 HaA2
#> 1    0 0.0 0.00 0.00 0.00 0.00
#> 2    0 0.7 0.14 0.21 0.14 0.07
#> 3    0 1.0 0.00 1.00 0.00 1.00
#> 4    0 0.0 0.00 0.00 0.00 0.00
#> 5    0 0.0 0.00 0.00 0.00 0.00
#> 6    0 0.0 0.00 0.00 0.00 0.00
#> 7    0 0.7 0.14 0.21 0.14 0.07
#>    HaB HaB1 HaB2/3  IA  Ha HaC
#> 1 0.00 0.00   0.00 1.0 0.0   0
#> 2 0.35 0.14   0.21 0.7 0.7   0
#> 3 1.00 1.00   0.00 1.0 1.0   0
#> 4 0.00 0.00   0.00 1.0 0.0   0
#> 5 0.00 0.00   0.00 1.0 0.0   0
#> 6 0.00 0.00   0.00 0.0 0.0   0
#> 7 0.35 0.14   0.21 0.7 0.7   0
#>   HaC1 HaC1a HaC1b HaC2 HaD
#> 1    0     0     0    0 0.0
#> 2    0     0     0    0 0.7
#> 3    0     0     0    0 1.0
#> 4    0     0     0    0 0.0
#> 5    0     0     0    0 0.0
#> 6    0     0     0    0 0.0
#> 7    0     0     0    0 0.7
#>        HaD1       HaD2      HaD3
#> 1 0.0000000 0.00000000 0.0000000
#> 2 0.3705882 0.08235294 0.2470588
#> 3 0.5294118 0.11764706 0.3529412
#> 4 0.0000000 0.00000000 0.0000000
#> 5 0.0000000 0.00000000 0.0000000
#> 6 0.0000000 0.00000000 0.0000000
#> 7 0.3705882 0.08235294 0.2470588
#>   Lt Flt   LtA   LtB LtB1  LtB2
#> 1  1 1.0 0.350 0.650 0.30 0.350
#> 2  0 0.0 0.000 0.000 0.00 0.000
#> 3  1 1.0 1.000 0.000 0.00 0.000
#> 4  1 0.5 0.175 0.325 0.15 0.175
#> 5  1 0.7 0.700 0.000 0.00 0.000
#> 6  0 0.0 0.000 0.000 0.00 0.000
#> 7  1 1.0 0.350 0.650 0.30 0.350
#>   LtC LtC1 LtC2 LtD      LtD1
#> 1   1  0.5  0.5   1 0.4814815
#> 2   0  0.0  0.0   0 0.0000000
#> 3   0  0.0  0.0   0 0.0000000
#> 4   0  0.0  0.0   1 0.4814815
#> 5   0  0.0  0.0   1 0.4814815
#> 6   0  0.0  0.0   0 0.0000000
#> 7   1  0.5  0.5   1 0.4814815
#>       LtD1a     LtD1b      LtD2
#> 1 0.1851852 0.2962963 0.5185185
#> 2 0.0000000 0.0000000 0.0000000
#> 3 0.0000000 0.0000000 0.0000000
#> 4 0.1851852 0.2962963 0.5185185
#> 5 0.1851852 0.2962963 0.5185185
#> 6 0.0000000 0.0000000 0.0000000
#> 7 0.1851852 0.2962963 0.5185185
#>       LtD2a     LtD2b Rom MANZ
#> 1 0.2962963 0.2222222   0    0
#> 2 0.0000000 0.0000000   0    0
#> 3 0.0000000 0.0000000   0    0
#> 4 0.2962963 0.2222222   1    0
#> 5 0.2962963 0.2222222   1    0
#> 6 0.0000000 0.0000000   0    0
#> 7 0.2962963 0.2222222   0    0

Comparing Chronologies

Comparing dates by calculating similarities with different indices is possible with chron_dates_calc_sim().

archChron::chron_dates_calc_sim(
    cconn     = cconn,
    chron_ref = chron_ref,
    id1       = "1412",
    id2       = "1123",
    thres     = 0.5
)
#>                   Dice1 
#>              0.45454545 
#>                   Dice2 
#>              0.33333333 
#>                 Jaccard 
#>              0.23809524 
#>               SWJaccard 
#>              0.48387097 
#>                 Gleason 
#>              0.38461538 
#>             KulczynskiI 
#>              0.31250000 
#>            KulczynskiII 
#>              0.39393939 
#>        DriverandKroeber 
#>              0.38924947 
#>          Braun-Blanquet 
#>              0.33333333 
#>                 Simpson 
#>              0.45454545 
#>              Sorgenfrei 
#>              0.15151515 
#>               Mountford 
#>              0.05000000 
#>         FagerandMcGowan 
#>             -7.11075053 
#>         SokalandSneathI 
#>              0.13513514 
#>             McConaughey 
#>             -0.21212121 
#>                 Johnson 
#>              0.78787879 
#>            VanderMaarel 
#>             -0.23076923 
#>   ConsonniandTodeschini 
#>              0.57966188 
#>           RussellandRao 
#>              0.10204082 
#>   ConsonniandTodeschini 
#>              0.45801353 
#>        SokalandMichener 
#>              0.67346939 
#>       RogersandTanimoto 
#>              0.50769231 
#>        SokalandSneathII 
#>              0.80487805 
#>       SokalandSneathIII 
#>              2.06250000 
#>                   Faith 
#>              0.38775510 
#>        GowerandLegendre 
#>              0.80487805 
#>                   Gower 
#>              0.07147279 
#>        AustinandColwell 
#>              1.02071206 
#>   ConsonniandTodeschini 
#>              0.90141610 
#>                  Hamann 
#>              0.34693878 
#>                 PeirceI 
#>              0.19138756 
#>                PeirceII 
#>              0.15686275 
#>                  YulesQ 
#>              0.40000000 
#>                  YulesW 
#>              0.20871215 
#>                PearsonI 
#>              1.47105732 
#>               PearsonII 
#>              0.06512577 
#>                     Phi 
#>              0.18593091 
#>                 Michael 
#>              0.23791822 
#>                   ColeI 
#>              0.14035088 
#>                  ColeII 
#>              0.21390374 
#>                   Cohen 
#>              5.20755644 
#>      MaxwellandPilliner 
#>              5.25225731 
#>                  Dennis 
#>              0.88971308 
#>              Dispersion 
#>              0.03331945 
#>   ConsonniandTodeschini 
#>              0.13093993 
#>                  Stiles 
#>              8.42474313 
#>                   Scott 
#>              0.16239316 
#>             Tetrachoric 
#>             -0.50559509 
#>               Oddsratio 
#>              2.33333333 
#>                    Rand 
#>              0.64455782 
#>                     ARI 
#>              0.06622875 
#>             LoevingersH 
#>                      NA 
#>        SokalandSneathIV 
#>              0.54160803 
#>         SokalandSneathV 
#>              0.30321788 
#>        RogotandGoldberg 
#>              0.58119658 
#>  Baroni-UrbaniandBuserI 
#>              0.51267293 
#>               PeirceIII 
#>              0.18604651 
#>        HawkinsandDotson 
#>              0.75541126 
#>               Tarantula 
#>              3.45454545 
#>          HarrisandLahey 
#>             16.84415584 
#>                 ForbesI 
#>              1.48484848 
#> Baroni-UrbaniandBuserII 
#>              0.02534587 
#>                  Fossum 
#>             77.24655773 
#>               ForbesII  
#>              0.18018018 
#>                  Eyraud 
#>              0.90102261 
#>                  Tarwid 
#>            244.59756098 
#>      GoodmanandKruskalI 
#>              0.00000000 
#>               Anderberg 
#>              0.00000000 
#>    GoodmanandKruskalII  
#>             -0.23076923 
#>         GilbertandWells 
#>              0.39531274 
#> ConsonniandTodeschiniII 
#>              0.27576772

Back to Chronstrings

Writing data back to chronstrings, which can easily be stored in a database, is a particularly important task, especially after processing, filtering, and aggregating data. This is handled by the chron_string_create() function.

archChron::chron_string_create(
    cconn     = cconn,
    chron_ref = chron_ref,
    subset    = "x",
    id        = NULL
)
#>     id
#> 1 1412
#> 2 1164
#> 3 1123
#> 4 1146
#> 5 1235
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           fortME
#> 1 fortME_1, fortME_Vorg_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_1, fortME_Vorg>IA>Lt>Flt>LtA_0.35, fortME_Vorg>IA>Lt>Flt>LtB_0.65, fortME_Vorg>IA>Lt>Flt>LtB>LtB1_0.3, fortME_Vorg>IA>Lt>Flt>LtB>LtB2_0.35, fortME_Vorg>IA>Lt>LtC_1, fortME_Vorg>IA>Lt>LtC>LtC1_0.5, fortME_Vorg>IA>Lt>LtC>LtC2_0.5, fortME_Vorg>IA>Lt>LtD_1, fortME_Vorg>IA>Lt>LtD>LtD1_0.481481481481481, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a_0.185185185185185, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2_0.518518518518518, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b_0.222222222222222
#> 2                                                                                                                                          fortME_1, fortME_Vorg_1, fortME_Vorg>BA_0.7, fortME_Vorg>BA>SBA_0.7, fortME_Vorg>BA>SBA>BzD_0.14, fortME_Vorg>BA>SBA>HaA_0.21, fortME_Vorg>BA>SBA>HaA>HaA1_0.14, fortME_Vorg>BA>SBA>HaA>HaA2_0.07, fortME_Vorg>BA>SBA>HaB_0.35, fortME_Vorg>BA>SBA>HaB>HaB1_0.14, fortME_Vorg>BA>SBA>HaB>HaB2/3_0.21, fortME_Vorg>IA_0.7, fortME_Vorg>IA>Ha_0.7, fortME_Vorg>IA>Ha>HaD_0.7, fortME_Vorg>IA>Ha>HaD>HaD1_0.370588235294118, fortME_Vorg>IA>Ha>HaD>HaD2_0.0823529411764706, fortME_Vorg>IA>Ha>HaD>HaD3_0.247058823529412
#> 3                                                                                                                                                                                         fortME_1, fortME_Vorg_1, fortME_Vorg>BA_1, fortME_Vorg>BA>SBA_1, fortME_Vorg>BA>SBA>HaA_1, fortME_Vorg>BA>SBA>HaA>HaA2_1, fortME_Vorg>BA>SBA>HaB_1, fortME_Vorg>BA>SBA>HaB>HaB1_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Ha_1, fortME_Vorg>IA>Ha>HaD_1, fortME_Vorg>IA>Ha>HaD>HaD1_0.529411764705882, fortME_Vorg>IA>Ha>HaD>HaD2_0.117647058823529, fortME_Vorg>IA>Ha>HaD>HaD3_0.352941176470588, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_1, fortME_Vorg>IA>Lt>Flt>LtA_1
#> 4                                                                      fortME_1, fortME_Vorg_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_0.5, fortME_Vorg>IA>Lt>Flt>LtA_0.175, fortME_Vorg>IA>Lt>Flt>LtB_0.325, fortME_Vorg>IA>Lt>Flt>LtB>LtB1_0.15, fortME_Vorg>IA>Lt>Flt>LtB>LtB2_0.175, fortME_Vorg>IA>Lt>LtD_1, fortME_Vorg>IA>Lt>LtD>LtD1_0.481481481481481, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a_0.185185185185185, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2_0.518518518518518, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b_0.222222222222222, fortME_Rom_1
#> 5                                                                                                                                                                                    fortME_1, fortME_Vorg_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_0.7, fortME_Vorg>IA>Lt>Flt>LtA_0.7, fortME_Vorg>IA>Lt>LtD_1, fortME_Vorg>IA>Lt>LtD>LtD1_0.481481481481481, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a_0.185185185185185, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2_0.518518518518518, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b_0.222222222222222, fortME_Rom_1
#>   fortNE
#> 1   <NA>
#> 2   <NA>
#> 3   <NA>
#> 4   <NA>
#> 5   <NA>
#>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  chronstring_all
#> 1 fortME_1, fortME_Vorg_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_1, fortME_Vorg>IA>Lt>Flt>LtA_0.35, fortME_Vorg>IA>Lt>Flt>LtB_0.65, fortME_Vorg>IA>Lt>Flt>LtB>LtB1_0.3, fortME_Vorg>IA>Lt>Flt>LtB>LtB2_0.35, fortME_Vorg>IA>Lt>LtC_1, fortME_Vorg>IA>Lt>LtC>LtC1_0.5, fortME_Vorg>IA>Lt>LtC>LtC2_0.5, fortME_Vorg>IA>Lt>LtD_1, fortME_Vorg>IA>Lt>LtD>LtD1_0.481481481481481, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a_0.185185185185185, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2_0.518518518518518, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b_0.222222222222222
#> 2                                                                                                                                          fortME_1, fortME_Vorg_1, fortME_Vorg>BA_0.7, fortME_Vorg>BA>SBA_0.7, fortME_Vorg>BA>SBA>BzD_0.14, fortME_Vorg>BA>SBA>HaA_0.21, fortME_Vorg>BA>SBA>HaA>HaA1_0.14, fortME_Vorg>BA>SBA>HaA>HaA2_0.07, fortME_Vorg>BA>SBA>HaB_0.35, fortME_Vorg>BA>SBA>HaB>HaB1_0.14, fortME_Vorg>BA>SBA>HaB>HaB2/3_0.21, fortME_Vorg>IA_0.7, fortME_Vorg>IA>Ha_0.7, fortME_Vorg>IA>Ha>HaD_0.7, fortME_Vorg>IA>Ha>HaD>HaD1_0.370588235294118, fortME_Vorg>IA>Ha>HaD>HaD2_0.0823529411764706, fortME_Vorg>IA>Ha>HaD>HaD3_0.247058823529412
#> 3                                                                                                                                                                                         fortME_1, fortME_Vorg_1, fortME_Vorg>BA_1, fortME_Vorg>BA>SBA_1, fortME_Vorg>BA>SBA>HaA_1, fortME_Vorg>BA>SBA>HaA>HaA2_1, fortME_Vorg>BA>SBA>HaB_1, fortME_Vorg>BA>SBA>HaB>HaB1_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Ha_1, fortME_Vorg>IA>Ha>HaD_1, fortME_Vorg>IA>Ha>HaD>HaD1_0.529411764705882, fortME_Vorg>IA>Ha>HaD>HaD2_0.117647058823529, fortME_Vorg>IA>Ha>HaD>HaD3_0.352941176470588, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_1, fortME_Vorg>IA>Lt>Flt>LtA_1
#> 4                                                                      fortME_1, fortME_Vorg_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_0.5, fortME_Vorg>IA>Lt>Flt>LtA_0.175, fortME_Vorg>IA>Lt>Flt>LtB_0.325, fortME_Vorg>IA>Lt>Flt>LtB>LtB1_0.15, fortME_Vorg>IA>Lt>Flt>LtB>LtB2_0.175, fortME_Vorg>IA>Lt>LtD_1, fortME_Vorg>IA>Lt>LtD>LtD1_0.481481481481481, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a_0.185185185185185, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2_0.518518518518518, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b_0.222222222222222, fortME_Rom_1
#> 5                                                                                                                                                                                    fortME_1, fortME_Vorg_1, fortME_Vorg>IA_1, fortME_Vorg>IA>Lt_1, fortME_Vorg>IA>Lt>Flt_0.7, fortME_Vorg>IA>Lt>Flt>LtA_0.7, fortME_Vorg>IA>Lt>LtD_1, fortME_Vorg>IA>Lt>LtD>LtD1_0.481481481481481, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1a_0.185185185185185, fortME_Vorg>IA>Lt>LtD>LtD1>LtD1b_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2_0.518518518518518, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2a_0.296296296296296, fortME_Vorg>IA>Lt>LtD>LtD2>LtD2b_0.222222222222222, fortME_Rom_1

Visualisation

Since the chronology objects contain rather complex information, a specific kind of date visualisation is required. A first approach is to simply plot a time scale that can be used as part of different visualisations. Certain time intervals can be highlighted using the date and cdens parameters

archChron::plot_tscale(
         date        = list(c(-520,-470), c(-300,-130)),
         cdens       = c(0.6, 0.3),
         range       = c(-1000, 0),
         steps       = 10,
         ticks       = 1,  
         cex.axis    = 2,
         color       = "deeppink3",
         orientation = "h",
         phasesteps  = FALSE
         )

For the visualisation of chronology systems, the functions chron_chronref_plot_sequence() for a single system and chron_chronref_plot_seqs() for multiple systems are used. For this kind of plot, a certain hierarchy level has to be provided.

archChron::chron_chronref_plot_seqs(
  chronreflist = chron_ref,
  order        = "auto",
  range        = c(-1000, 500),
  #range        = "auto",
  cex.axis     = 1.4,
  steps        = 10,
  ticks        = 3,
  cex.main     = 1.4
)

The chron_dates_plot() function provides a rather unusual but very useful visualisation. It displays the entire structure of the chronref object, with the chronrep probabilities represented as grey values. The layout parameter allows choosing one of two layout types.

archChron::chron_dates_plot(
    cconn        = cconn,
    chron_ref    = chron_ref,
    id           = NULL,
    subset       = "all",
    cmin         = -1500,
    cmax         = 0,
    thres        = 0,
    chronsysname = NULL,
    cex          = 1.3
)

Finally, producing aoristic curves is useful for archaeological analysis.

archChron::chron_dates_plot_curve(
    cconn        = cconn,
    chron_ref    = chron_ref,
    hlevel       = "auto",
    cmin         = -1000,
    cmax         = 0,
    id           = NULL,
    subset       = "all",
    chronsysname = c("fortME", "fortNE"),
    col          = "black",
    fill         = TRUE,
    xaxt         = TRUE,
    main         = NULL
)

Transforming Dates

Analyses of archaeological observations often require a uniform chronological framework. While only one chronological system is usually used for local analyses, supra-regional studies or investigations involving old data can sometimes be problematic, as different chronologies can be used. In our fortification data, for example, the Central European system is almost always used, but on one occasion there is a site that was dated according to the Northern European system. Of course, this makes sense in a local context, as the local chronologies are developed on the basis of the local material, but for a supra-regional comparison, this is a problem. We would therefore like to represent the Northern European date in the Central European chronological system, i.e., to transform it.

We need a transformation matrix \(M\) for a specific pair of chronological systems for this purpose. The new date can be obtained by multiplying the old date with the transformation matrix, analogous to spatial transformations.

\[d2 = d1M\]

The values in the transformation matrix are membership values mapping the old intervals to the new ones.

The transformation matrix can be based on:

The function chron_dates_trans_matrix() calculates the transformation matrix for absolute dates. The transformation matrix for the archaeological content requires expert knowledge. It is possible to calculate one for absolute dates and modify the matrix with expert knowledge.

trans <- archChron::chron_dates_trans_matrix(
  csys_from = "fortME",
  csys_to   = "fortNE",
 chron_ref  = chron_ref)
stats::heatmap(t(trans), Rowv = NA, Colv = NA)

The function chron_dates_trans() applies the transformation matrix to a date in the chronref format.

archChron::chron_dates_trans(
    cconn     = cconn,
    matrix    = trans,
    chron_ref = chron_ref,
    csys_from = "fortME",
    csys_to   = "fortNE",
    id        = NULL,
    subset    = "all",
    force     = FALSE,
    agg       = "max",
    scale     = "none"
)
#> Berechne Transformationsmatrix 'Tmat_a_fortME_fortNE'.
#> Matrix 'Tmat_a_fortME_fortNE' in cconn gespeichert.
#> Transformation abgeschlossen: 6 IDs von 'fortME' nach 'fortNE' transformiert.
archChron::chron_dates_plot(
    cconn        = cconn,
    chron_ref    = chron_ref,
    id           = NULL,
    subset       = "all",
    cmin         = -1500,
    cmax         = 0,
    thres        = 0,
    chronsysname = NULL,
    cex          = 1.3
)

If we want to use a consistent absolute chronology, we can do the same: transforming a relative chronology to another relative chronology that has regular absolute bins. This is possible because absolute chronologies can be represented by specific relative chronology systems that use intervals of absolute dates. These chronology systems have the same structure as the relative ones we are using with archChron. archChron provides a function (chron_chronref_create_abs()) to generate chronology system reference objects for such chronologies automatically. The somewhat unusual name of the system describes the shape of the system in a systematic way.

abschron <- archChron::chron_chronref_create_abs(
        from  = -1000,
        to    = 300,
        steps = c(1, 25, 50, 100),
        path  = NULL)
chron_ref <- append(x = chron_ref, values = abschron)
names(chron_ref)
#> [1] "fortNE"                             
#> [2] "fortME"                             
#> [3] "abschronF_1000T300s1300s100s50s25s1"
trans_abs <- archChron::chron_dates_trans_matrix(
                  csys_from = "fortNE",
                  csys_to   = "abschronF_1000T300s1300s100s50s25s1",
                  chron_ref = chron_ref)
stats::heatmap(t(trans_abs), Rowv = NA, Colv = NA)

archChron::chron_dates_trans(
    cconn     = cconn,
    matrix    = trans_abs,
    chron_ref = chron_ref,
    csys_from = "fortNE",
    csys_to   = "abschronF_1000T300s1300s100s50s25s1",
    id        = NULL,
    subset    = "all",
    force     = FALSE,
    agg       = "max",
    scale     = "none"
)
#> Berechne Transformationsmatrix 'Tmat_a_fortNE_abschronF_1000T300s1300s100s50s25s1'.
#> Matrix 'Tmat_a_fortNE_abschronF_1000T300s1300s100s50s25s1' in cconn gespeichert.
#> Zieltabelle 'crep_abschronF_1000T300s1300s100s50s25s1' neu angelegt.
#> Subset-Tabelle 'subsets_abschronF_1000T300s1300s100s50s25s1' neu angelegt.
#> Transformation abgeschlossen: 6 IDs von 'fortNE' nach 'abschronF_1000T300s1300s100s50s25s1' transformiert.
archChron::chron_dates_plot(
    cconn        = cconn,
    chron_ref    = chron_ref,
    id           = NULL,
    subset       = "all",
    cmin         = -1500,
    cmax         = 0,
    thres        = 0,
    chronsysname = NULL,
    cex          = 1.3
)

Please note that the grey area with the finest resolution does not indicate certain probabilities. It is just the dense patterns of the borders of more than 1000 rectangles. This becomes visible when we plot the values as a curve. The values are very small because even sure dates of 1 are distributed to many years.

Radiocarbon Data

Radiocarbon data can be transformed into relative chronologies.

archChron::chron_dates_radiocarbon(
    cconn        = cconn,
    chron_ref    = chron_ref,
    ages         = 2200,
    ageSds       = 50,
    ids          = "testwert",
    calCurves    = "intcal20",
    chronsysname = "fortME"
)
#> Kalibriere 1 Radiokarbondatum/Daten ...
#> fortME: 1 Daten eingetragen.

References

Allen 1983: J. F. Allen, Maintaining knowledge about temporal intervals. Commun. ACM 26, 11, 1983, 832–843. DOI: https://doi.org/http://doi.acm.org/10.1145/182.358434.
Allen 1984: J. F. Allen, Towards a general theory of action and time. Artif. Intell. 23, 2, 1984, 123–154. DOI: https://doi.org/10.1016/0004-3702(84)90008-0.
Allen/Ferguson 1994: J. F. Allen/G. Ferguson, Actions and events in interval temporal logic. Journal of Logic and Computation 4, 1994, 531–579.
Bäbler 2004: B. Bäbler, Archäologie und Chronologie: Eine Einführung (Darmstadt 2004). url{http://www.gbv.de/dms/hebis-darmstadt/toc/124101208.pdf}.
Hansen 2001: S. Hansen, Von den anfängen der prähistorischen archäologie: Christian jürgensen thomsen und das dreiperiodensystem. Prähistorische Zeitschrift 76, 2001, 10–23.
Nakoinz 2013: O. Nakoinz, Archäologische Kulturgeographie der ältereisenzeitlichen Zentralorte Südwestdeutschlands 224. Universitätsforsch. Prähist. Arch. (Bonn 2013).
Nakoinz et al. 2017: O. Nakoinz/J. Kneisel/I. Beilke-Voigt/J. Dräger, Befestigungen der Bronze- und Eisenzeit zwischen Marburg und Uppsala. In: I. Beilke-Voigt/O. Nakoinz (eds.), Enge Nachbarn: Das Problem von Doppelburgen und Mehrfachburgen in der Bronzezeit und im Mittelalter 47. Edition Topoi (Berlin 2017) 21–88. https://edition-topoi.org/articles/details/befestigungen-der-bronze--und-eisenzeit-zwischen-marburg-und-uppsala.
Nakoinz 2025: O. Nakoinz, archChron: Handling chronological data in archaeology (2025).
Ratcliffe/McCullagh 1998: J. H. Ratcliffe/M. J. McCullagh, Aoristic crime analysis. International Journal of Geographical Information Science 12, 7, 1998, 751–764.
Stevens 1946: S. S. Stevens, On the theory of scales of measurement. Science 103, 2684, 1946, 677–680. DOI: https://doi.org/10.1126/science.103.2684.677.