A mylife export is a single semicolon-delimited
.csv file with eight columns:
"Tag";"Datum";"Uhrzeit";"Ereignis";"Wert";"Einheit";"Information";"Notiz"
"Fr.";"16.01.26";"08:01";"Boost";" 46 min.";;"Dauer: 46 min.Startzeit: 08:01 | Endzeit: 08:47";
"Fr.";"16.01.26";"09:05";"Kohlenhydrate";"42";"g KH";;
"Fr.";"16.01.26";"09:06";"Bolus";"4,40";"U";"Bolusvorschlag: 4.40 U";
"Fr.";"16.01.26";"09:22";"Bolus";"4,40";"U";"Bolusvorschlag: 4.40 U";
"Fr.";"16.01.26";"09:22";"Kohlenhydrate";"42";"g KH";;
"Fr.";"16.01.26";"10.00";"Auto mode An";"N/A";;"Startdatum: 16.01.26 10.00Endtermin: 16.01.26 19:44";
"Fr.";"16.01.26";"11:29";"Ease-off";" 30 min.";;"Dauer: 30 min.Startzeit: 11:29 | Endzeit: 11:59";
"Fr.";"16.01.26";"12:17";"Bolus";"6,60";"U";"Bolusvorschlag: 5.60 U";
"Fr.";"16.01.26";"12:17";"Kohlenhydrate";"60";"g KH";;
Each event represents a single row. Both the column headers and the event labels are language-specific and vary with the language of the user’s account (the example above is in German).
Because the headers in a mylife export are language-specific,
aidR cannot identify a file from its header names. It
relies instead on the structure of the header row, which is
delimited by semicolons ; and must split into exactly eight
columns. For the same reason, event types are not matched by their
labels either: bolus rows are recognized by a unit starting with
U, and carbohydrate rows by a unit starting with
g.
To inspect the raw entries, we parse the export with
clean = FALSE, which returns the full information provided
by mylife:
All entries are preserved as-is under their original, language-specific label, so nothing in the export is lost. Possible labels include:
Bolus; unit U.head(data$Bolus)
timestamp type amount units information note
1 2026-01-16 09:06:00 Bolus 4,40 U Bolusvorschlag: 4.40 U NA
2 2026-01-16 09:22:00 Bolus 4,40 U Bolusvorschlag: 4.40 U NA
3 2026-01-16 12:17:00 Bolus 6,60 U Bolusvorschlag: 5.60 U NA
4 2026-01-16 15:43:00 Bolus 3,55 U Bolusvorschlag: 3.90 U NA
5 2026-01-16 15:48:00 Bolus 3,55 U Bolusvorschlag: 3.90 U NA
6 2026-01-16 16:02:00 Bolus 1,70 U Bolusvorschlag: 1.70 U NAKohlenhydrate;
unit g.head(data$Kohlenhydrate)
timestamp type amount units information note
1 2026-01-16 09:05:00 Kohlenhydrate 42 g KH NA NA
2 2026-01-16 09:22:00 Kohlenhydrate 42 g KH NA NA
3 2026-01-16 12:17:00 Kohlenhydrate 60 g KH NA NA
4 2026-01-16 15:43:00 Kohlenhydrate 45 g KH NA NA
5 2026-01-16 16:02:00 Kohlenhydrate 15 g KH NA NA
6 2026-01-16 18:01:00 Kohlenhydrate 30 g KH NA NABlutzucker manuelle Eingabe; unit mg/dL
or mmol/L.head(data$`Blutzucker manuelle Eingabe`)
timestamp type amount units information note
1 2026-01-16 18:07:00 Blutzucker manuelle Eingabe 190 mg/dL NA NAEase-off): start and
duration of Ease-off mode.Boost): start and duration of
Boost mode.Hypo Kohlenhydrate;
unit g.Auto mode An.langsam resorbierbar;
unit g.Auto mode lädt.Note that a mylife export contains no CGM or basal
data - bolus, carbs, and
SMBG are the only core data types available from this
platform.
When parse_data is run with clean = TRUE,
the cleaned data types are built from the following raw files and
attributes:
| Cleaned data type | Used files | Used attributes |
|---|---|---|
bolus |
mylife_example.csv |
All entries whose unit is U, i.e. bolus entries. |
carbs |
mylife_example.csv |
All entries whose unit is g, including regular
carbohydrates, slowly resorbing carbohydrates, and hypo carbohydrate
entries. |
SMBG |
mylife_example.csv |
All entries whose unit is mg/dL or mmol/L,
i.e. manual blood glucose entries. |
total_bolus |
mylife_example.csv |
The cleaned bolus data, summed per day. |
aidR converts them to mg/dL
automatically.timezone_offset is always NA, since mylife
exports report only local (wall-clock) time.total_basal, since a mylife export contains
no basal data. total_bolus is summed from the cleaned
bolus data and carries source = "summed".estimated_absorption_duration is parsed out of the
free-text information column for slowly resorbing carbs
(e.g. "... 2h ...") and is NA when not
stated.is_hypo_treatment is likewise derived from the
information column, by looking for the marker
HypoTreatment.label retains the original, language-specific event
label, so the source of each carbohydrate entry stays traceable after
merging across platforms.link_id is always NA for
bolus and carbs: the export does not record
which carbohydrate entry triggered which bolus. Matching them by
timestamp and amount is not implemented.