archChron, a Package
for Handling Archaeological Chronologies and Chronological DataThe 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.
Before we can dive into the practical work with the
archChron package, some methodological background needs to
be discussed.
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.
|----|
------------------------->
[500, 400[
that includes 500 and excludes 400A 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.
archChronThe 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.
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 NAThe columns of the chronology description files are:
c_system: name of the chronology systemid: identification number inside the chronology
systemp_id: ID of the superior entityc_level: hierarchy level, starting with the most
general entityc_order: order of phases inside one hierarchy
levelchronstring: chronology stringname_short: short phase name, must be identical to the
last phase name of the chronology string; no spaces including trailing
spaces, no Roman numerals; Arabic numbers increasing above 9 must have
zeros (03); no “_” or “>” inside the phase namesname_long: more comprehensive name of the phase; all
characters are allowedstart: start year of the phase; negative means BC; same
year as end year of the previous phase because years are understood as
points in time and not as time intervalsend: end year of the phasestart_error: half error range of the start date (start
date ± start_error); usually represented by slanted borders; zero does
not mean that there are no errors but that the chronological model
assumes precise transition datesend_error: half error range of the end date (end date ±
end_error)description: phase description and definitionlinks: links to online references of the phases (such
as at PeriodO), separated by commascomment: any commentsAs changes and corrections may occasionally be made to the chronsys files, it may be advisable to check the version.
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)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.8Due 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.
One advantage of the archChron concept, which is focused
on chronrefs and chronstrings, is that the archChron
package is not required but just makes things easier. Filtering
chronology strings can be done without specific software. A simple text
editor or spreadsheet programme is sufficient to create a table with a
text column containing chronology strings. Simple text search using
built-in tools of different programmes or grep works fine
but with some restrictions.
grepl("fortME_Vorg>BZ>SBZ>HaA>HaA2",
archChron::fort_main_sites$chron)
#> [1] FALSE FALSE FALSE FALSE FALSE
#> [6] FALSEHowever, in this case, the probabilities are not used. Including the probability narrows the search to results providing this specific probability value.
grepl("fortME_Vorg>BZ>SBZ>HaA>HaA2_0.2",
archChron::fort_main_sites$chron)
#> [1] FALSE FALSE FALSE FALSE FALSE
#> [6] FALSEIs the probability for the “TRUE” value 0.3 or even less? Do we really want to filter dates with such small probabilities? Whether this approach is useful depends on the probability numbers used in the data. Without probabilities, it is perfect; with only large probabilities, it is still fine.
grepl("fortME_Vorg>BZ>SBZ>HaA>HaA2_1.0",
archChron::fort_main_sites$chron)
#> [1] FALSE FALSE FALSE FALSE FALSE
#> [6] FALSEIn this case, it is 1.0, and it is obvious that filtering probabilities is possible using regular expressions, but not exactly simple. We could do something like:
grepl("fortME_Vorg>BZ>SBZ>HaA>HaA2_(?:0\\.[789]|1\\.0)",
archChron::fort_main_sites$chron)
#> [1] FALSE FALSE FALSE FALSE FALSE
#> [6] FALSERegular expressions are very powerful, and in fact they allow
filtering for any kinds of results, but the required regular expressions
might be very complicated. Therefore, this cannot be considered a
general practical solution. The archChron package offers
convenient functionality for different application scenarios.
archChronThis 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.
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
#> [31mTest 6:[0m [31mpossible_roman_numerals
#> [38;5;208m- 2: ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze[0m
#> [38;5;208m- 3: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer[0m
#> [38;5;208m- 4: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1[0m
#> [38;5;208m- 5: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2[0m
#> [38;5;208m- 6: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer[0m
#> [38;5;208m- 7: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1[0m
#> [38;5;208m- 8: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2[0m
#> [38;5;208m- 9: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3[0m
#>
#> [31mTest 7:[0m [31mspaces
#> [38;5;208m- 1: ChronDechelette1913-1914_Metal Ages[0m
#> [38;5;208m- 2: ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze[0m
#> [38;5;208m- 3: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer[0m
#> [38;5;208m- 4: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1[0m
#> [38;5;208m- 5: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2[0m
#> [38;5;208m- 6: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer[0m
#> [38;5;208m- 7: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1[0m
#> [38;5;208m- 8: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2[0m
#> [38;5;208m- 9: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3[0m
#>
#> [31mTest 9b:[0m [31mminus
#> [38;5;208m- 2: ChronDechelette1913-1914_Metal Ages>I-Age-du-bronze[0m
#> [38;5;208m- 3: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer[0m
#> [38;5;208m- 4: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode1[0m
#> [38;5;208m- 5: ChronDechelette1913-1914_Metal Ages>II-Premier-age-du-fer>Hallstatt-Periode2[0m
#> [38;5;208m- 6: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer[0m
#> [38;5;208m- 7: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene1[0m
#> [38;5;208m- 8: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene2[0m
#> [38;5;208m- 9: ChronDechelette1913-1914_Metal Ages>III-Second-age-du-fer>LaTene3[0m
#>
#> [31mTest 18:[0m [31mname_short_mismatch
#> [38;5;208m- 1: ChronDechelette1913-1914_Metal Ages[0mThe 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 NAUsing archChron functions makes it easier to filter
chronological strings considering probabilities. The
chron_filter_string() function filters only dates with
probabilities higher than that of the pattern (“0.8”).
archChron::chron_filter_string(
pattern = "fortME_Vorg>BZ>SBZ>HaA>HaA2_0.8",
object = archChron::fort_main_sites$chron
)
#> [1] FALSE FALSE FALSE FALSE FALSE
#> [6] FALSEThe limitation is that only the first digit after the decimal point is used. For the search pattern “fortME_Vorg>BZ>SBZ>HaA>HaA2_0.89”, the objects “fortME_Vorg>BZ>SBZ>HaA>HaA2_0.81” and “fortME_Vorg>BZ>SBZ>HaA>HaA2_0.99” would return “TRUE”, but “fortME_Vorg>BZ>SBZ>HaA>HaA2_0.79” would return “FALSE”. In most cases, the first digit is completely sufficient; in other cases, more elaborated functions have to be used.
A more serious disadvantage of this approach and the regex filtering of probabilities is that the superior and inferior phases are excluded. If we search for “fortME_Vorg>BZ>SBZ>HaA>HaA2_0.2”, “fortME_Vorg>BZ>SBZ>HaA_1.0” would not be returned, even if the aoristic value for HaA2 is about 0.5. The fast search returns only sites where the phase in search is explicitly mentioned.
To sum up, very fast and fast searches are only useful under certain
conditions. If these conditions (e.g. no low or no probabilities at all;
searching for explicitly mentioned phases) are met, they are quite good
solutions. If not, the archChron functions described below
should be used. Advanced filtering requires some preparation, but a
simple decision tree might be appropriate here:
┏━━━withoutProbabilities━━simpleTextfilter/grep
┏━━━flatChronology━━┫
chronologicalFiltering━━━━┫ ┗━━━withProbabilities━━━━━chron_filter_string()
┃
┃
┗━━━━━hierachicalChronology━━━━━━━━━━━━━━━chron_filter_chronref...()
Advanced filtering is possible in any case, and it is worth considering that it allows for a more consistent workflow than the other two solutions.
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.
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 setzenThe 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.
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 0Here, 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:
type = "list",
targetfile = "xxx.rds")type = "duckdb",
targetfile = "xxx.duckdb")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 FALSEWe 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.
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.
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 1235The 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.
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 -15Filtering 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 TRUEThis 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 TRUEBy 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 fortMEWe 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] TRUENow, 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] FALSEIf 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] TRUEThe 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 TRUEThe 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 FALSESometimes, 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 FALSESome 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_fortNEWe 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 50The “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 FALSEIt 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.
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 0The 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 0Comparing 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.27576772Writing 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_1Since 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
)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)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)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 can be transformed into relative chronologies.