Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • imebi/limesurvey/tokenaufbereiter
1 result
Show changes
Commits on Source (3)
# preparatory work ####
# reset workspace #
rm(list = ls())
# setwd #
setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter")
suppressWarnings({
suppressMessages({
library(readxl)
library(writexl)
library(tidyverse)
library(lubridate)
#source("./function_load.R")
source("./download_get_key.R")
})
})
#Umfragen ID:
# 433442
atr <- c(
"emailstatus",
"language"
)
ls_433442_0 <- get_responses(433442, iFromResponseID =1,iToResponseID=15000)
ls_433442_1 <- get_responses(433442, iFromResponseID =15001,iToResponseID=25000)
ls_433442_2 <- get_responses(433442, iFromResponseID =25001,iToResponseID=35000)
ls_433442_3 <- get_responses(433442, iFromResponseID =35001,iToResponseID=45000)
ls_433442_4 <- get_responses(433442, iFromResponseID =45001,iToResponseID=55000)
ls_433442_5 <- get_responses(433442, iFromResponseID =55001,iToResponseID=65000)
ls_433442_6 <- get_responses(433442, iFromResponseID =65001,iToResponseID=75000)
ls_433442_7 <- get_responses(433442, iFromResponseID =75001,iToResponseID=85000)
ls_433442_8 <- get_responses(433442, iFromResponseID =85001,iToResponseID=95000)
filtered_data_frames <- Filter(function(x) is.data.frame(get(x)), ls())
# die "values" zu "Data" machen und die participant_info entschachteln
data_frames_list <- lapply(filtered_data_frames, get)
suppressWarnings({
data_frames_list2 <- lapply(data_frames_list, unnest)
})
combined_df <- do.call(rbind, data_frames_list2)
tokenlist <- read_xlsx("G:/IMEBI_POST/Kunze.Mareike/token.xlsx")
result <- left_join(tokenlist, combined_df,by = c("originaltoken" = "token"))
result <- result %>% select(-id, -submitdate,-lastpage,-startlanguage,-seed,-startdate,-datestamp,-ipaddr,-FB0Q7q1,-FB0Q7q2.1.,-FB0Q7q2.2.)
print(result)
write.csv(result,paste0("./Adressen_nach_tokenliste_",format(Sys.Date(), "%Y_%m_%d"),".csv"), row.names = F)
......@@ -30,67 +30,71 @@ if (length(commandArgs(trailingOnly = TRUE)) > 0) {
#create global variable for the readline-command
choice <- T
function_create_validfrom <- function(combinedDataFrame){
#nrow(cleaned_df)
# Format für validfrom
# 2023-10-23 08:02
#erhöht den Tag immer um 1, damit das Skript ab dem nächsten Tag startet.
date <- paste(year(Sys.time()),,,sep="-")
zyear <- year(Sys.time())
zmonth <- month(Sys.time())
zday <- day(Sys.time())+1
list_for_hour <- c()
for (i in 0:23){
if(i<10){
list_for_hour <- c(list_for_hour,paste0(zyear,"-",zmonth,"-",zday," ","0",i,":00"))
} else{
list_for_hour <- c(list_for_hour,paste0(zyear,"-",zmonth,"-",zday," ",i,":00"))
}
}
print(list_for_hour)
# es werden 300-500 Mails in einer Stunde versendet.
# bei 24h werden somit zwischen 7200 und 12000 Mails versendet.
# bei 100.000 werten und 7200 Mails muss ich also über 14 Tage gehen.
# Erstelle einen leeren Vektor für die Datumswerte
date_values <- c()
# Schleife von 0 bis 23 Stunden
for (i in 0:23) {
# Erhöhe das Datum um eine Stunde
current_date <- start_date + hours(i)
# Füge das Datum zum Vektor hinzu
date_values <- c(date_values, current_date)
# Wenn die Stunde 23 ist, erhöhe den Tag um eins und setze die Stunde auf 0
if (i == 23) {
start_date <- start_date + days(1) # Erhöhe den Tag um eins
start_date <- start_date - hours(23) # Setze die Stunde auf 0
}
}
anzahl_zeilen <- nrow(cleaned_df)
# Schleife über die Anzahl der Zeilen
for (i in 1:anzahl_zeilen) {
# Schreibe den aktuellen Wert in die Spalte 'column_name'
cleaned_df$validfrom[i] <- date
# Aktualisiere den Wert nach jeweils 300 Zyklen
if (i %% 300 == 0) {
date <- wert + 1
}
}
combined_token_with_download
}
# Funktion findet keine Verwendung. -> nicht fertig geschrieben!!
# wird in Limesurvey über die Menge geregelt.
# function_create_validfrom <- function(combinedDataFrame){
# # Probleme die bei der automatischen Datumssetzung entstehen:
# # Beim übergang auf den nächsten Monat muss aufgepasst werden.
# # Format für validfrom
# # 2023-10-23 08:02
#
# #erhöht den Tag immer um 1, damit das Skript ab dem nächsten Tag startet.
# date <- paste(year(Sys.time()),,,sep="-")
# zyear <- year(Sys.time())
# zmonth <- month(Sys.time())
# zday <- day(Sys.time())+1
# list_for_hour <- c()
#
# for (i in 0:23){
# if(i<10){
# list_for_hour <- c(list_for_hour,paste0(zyear,"-",zmonth,"-",zday," ","0",i,":00"))
# } else{
# list_for_hour <- c(list_for_hour,paste0(zyear,"-",zmonth,"-",zday," ",i,":00"))
# }
# }
# print(list_for_hour)
#
# # es werden 300-500 Mails in einer Stunde versendet.
# # bei 24h werden somit zwischen 7200 und 12000 Mails versendet.
# # bei 100.000 werten und 7200 Mails muss ich also über 14 Tage gehen.
#
# # Erstelle einen leeren Vektor für die Datumswerte
# date_values <- c()
#
# # Schleife von 0 bis 23 Stunden
# for (i in 0:23) {
# # Erhöhe das Datum um eine Stunde
# current_date <- start_date + hours(i)
#
# # Füge das Datum zum Vektor hinzu
# date_values <- c(date_values, current_date)
#
# # Wenn die Stunde 23 ist, erhöhe den Tag um eins und setze die Stunde auf 0
# if (i == 23) {
# start_date <- start_date + days(1) # Erhöhe den Tag um eins
# start_date <- start_date - hours(23) # Setze die Stunde auf 0
# }
# }
#
#
# anzahl_zeilen <- nrow(cleaned_df)
#
# # Schleife über die Anzahl der Zeilen
# for (i in 1:anzahl_zeilen) {
# # Schreibe den aktuellen Wert in die Spalte 'column_name'
# cleaned_df$validfrom[i] <- date
#
# # Aktualisiere den Wert nach jeweils 300 Zyklen
# if (i %% 300 == 0) {
# date <- wert + 1
# }
# }
#
#
#
# combined_token_with_download
# }
#first: define all functions:
......@@ -143,15 +147,19 @@ function_start <- function(){
cat(" wird verwendet, wenn TN angeschrieben werden, bei denen in der Mail keine Haushalts-ID angegeben wird.\n")
cat(" Tokenliste OHNE Haushald-ID erhält man von den wissenschaftlichen Mitarbeiter*innen\n")
cat("-------------------------------------------------------------------------------------------------------------------\n")
cat("5 = Tokenaufbereiter CoPrep Radiologie:\n")
#cat(" wird verwendet, wenn TN angeschrieben werden, bei denen in der Mail keine Haushalts-ID angegeben wird.\n")
#cat(" Tokenliste OHNE Haushald-ID erhält man von den wissenschaftlichen Mitarbeiter*innen\n")
cat("-------------------------------------------------------------------------------------------------------------------\n")
cat("9 = mir ist ein Fehler passiert. Es wird nichts gespeichert!\n")
function_read_prompt()
if (!choice %in% c("1","2","3","4","9")){
if (!choice %in% c("1","2","3","4","5","9")){
cat("\n")
cat("\n")
cat("##################\n")
cat("Ungültige Auswahl! Bitte verwende: 1, 2, 3, 4 oder 9. Danke.\n")
cat("Ungültige Auswahl! Bitte verwende: 1, 2, 3, 4, 5 oder 9. Danke.\n")
cat("##################\n")
cat("\n")
cat("\n")
......@@ -168,13 +176,15 @@ function_start <- function(){
function_Tokenaufbereiter_MIT_HHID_als_firstname()
} else if (choice == 4) {
function_Tokenaufbereiter_OHNE_HHID()
} else if (choice == 5) {
function_Tokenaufbereiter_coprep_radiologie()
} else {
function_exit()
}
}
}
#Nummer 1
function_Tokenaufbereiter_alle_TN <- function() {
cat("\n")
cat("Tokenaufbereiter alle TN\n")
......@@ -192,7 +202,7 @@ function_Tokenaufbereiter_alle_TN <- function() {
combined_token_with_download <- combined_token_with_download |> relocate(id, .before = firstname)
#save the file
#setwd("H:/01_Limesurvey_TokenVergleich")
#setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter/erstellte_Dateien")
write.csv(combined_token_with_download,paste0("./Umfrageteilnehmertabelle_",format(Sys.Date(), "%Y_%m_%d"),"_alle_TN.csv"), row.names = F)
......@@ -200,6 +210,7 @@ function_Tokenaufbereiter_alle_TN <- function() {
}
#Nummer 2
function_Tokenaufbereiter_Newsletter <- function() {
cat("\n")
cat("Tokenaufbereiter Newsletter\n")
......@@ -241,7 +252,7 @@ function_Tokenaufbereiter_Newsletter <- function() {
filter(!token %in% token_for_newsletter_to_remove$token)
#save the file
#setwd("H:/01_Limesurvey_TokenVergleich")
#setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter/erstellte_Dateien")
write.csv(combined_token_with_download,paste0("./Umfrageteilnehmertabelle_",format(Sys.Date(), "%Y_%m_%d"),"_Newsletter.csv"), row.names = F)
function_end()
......@@ -252,7 +263,7 @@ function_Tokenaufbereiter_Newsletter <- function() {
}
}
# Nummer 3
function_Tokenaufbereiter_MIT_HHID_als_firstname <- function() {
cat("\n")
cat("Tokenaufbereiter MIT HHID als firstname\n")
......@@ -303,17 +314,18 @@ function_Tokenaufbereiter_MIT_HHID_als_firstname <- function() {
combined_token_with_download <- combined_token_with_download |> relocate(token, .after = emailstatus)
#save the file
#setwd("H:/01_Limesurvey_TokenVergleich")
#setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter/erstellte_Dateien")
write.csv(combined_token_with_download,paste0("./Umfrageteilnehmertabelle_",format(Sys.Date(), "%Y_%m_%d"),"_mit_HHID_as_firstname.csv"), row.names = F)
function_end()
} else{
#Eingebe: irgenwas auser [ENTER] -> Abbruch
#Eingabe: irgendwas ausser [ENTER] -> Abbruch
function_exit()
}
}
#Nummer 4
function_Tokenaufbereiter_OHNE_HHID <- function() {
cat("\n")
cat("Tokenaufbereiter OHNE HHID\n")
......@@ -332,6 +344,7 @@ function_Tokenaufbereiter_OHNE_HHID <- function() {
if (choice == "y" || choice == ""){
#Eingabe: [ENTER] -> weiter gehts
#token_list <- read_xlsx(file.choose())
#laden und joinen
token_list <- tryCatch({
read_xlsx(file.choose())
......@@ -351,7 +364,7 @@ function_Tokenaufbereiter_OHNE_HHID <- function() {
#save the file
setwd("H:/01_Limesurvey_TokenVergleich")
#setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter/erstellte_Dateien")
write.csv(combined_token_with_download,paste0("./Umfrageteilnehmertabelle_",format(Sys.Date(), "%Y_%m_%d"),"_ohne_HHID.csv"), row.names = F)
function_end()
......@@ -360,11 +373,71 @@ function_Tokenaufbereiter_OHNE_HHID <- function() {
#Eingabe: irgenwas auser [ENTER] -> Abbruch
function_exit()
}
}
#Coprep-Radiologie
#Nummer 5 _ Neu Eingefügt am 12.11.2024 nach Anfrage von Mareike
function_Tokenaufbereiter_coprep_radiologie <- function() {
cat("\n")
cat("Tokenaufbereiter für CoPrep Radiologie\n")
cat("---------------------------------------\n")
if(use_powershell){
cat("Hast du die Datei? Press [y + ENTER]. Ansonsten kann das Script mit Eingabe von [e + ENTER] beendet werden\n")
}else{
cat("Hast du die Datei? Press [ENTER]. Ansonsten kann das Script mit Eingabe von [e + ENTER] beendet werden\n")
}
function_read_prompt()
if (choice == "y" || choice == ""){
#Eingabe: [ENTER] -> weiter gehts
#laden und joinen
token_list <- tryCatch({
read_xlsx(file.choose())
}, error = function(e) {
message("Failure: ",conditionMessage(e))
NULL
function_exit()
})
names(token_list) <- tolower(names(token_list))
combined_token_with_download <- inner_join(token_list,cleaned_df, by=c("hhid"="token"))
#rename
combined_token_with_download <- combined_token_with_download %>%
rename(first = firstname)
combined_token_with_download <- combined_token_with_download %>%
rename(last = lastname)
combined_token_with_download$lastname <- paste(combined_token_with_download$first,
combined_token_with_download$last, sep = " ")
combined_token_with_download <- combined_token_with_download %>%
rename(firstname = hhid)
combined_token_with_download$first <- NULL
combined_token_with_download$last <- NULL
# zeilennummer erzeugen
combined_token_with_download <- combined_token_with_download %>% mutate(id = row_number())
#relocate
combined_token_with_download <- combined_token_with_download |> relocate(id, .before = firstname)
combined_token_with_download <- combined_token_with_download |> relocate(lastname, .after = firstname)
combined_token_with_download <- combined_token_with_download |> relocate(token, .after = emailstatus)
#save the file
#setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter/erstellte_Dateien")
write.csv(combined_token_with_download,paste0("./Umfrageteilnehmertabelle_",format(Sys.Date(), "%Y_%m_%d"),"_CoPrep_Radiologie.csv"), row.names = F)
function_end()
} else{
#Eingabe: irgendwas ausser [ENTER] -> Abbruch
function_exit()
}
}
function_exit <- function() {
cat("\n")
cat("Script wird beendet. Es erfolgt keine Speicherung irgendwelcher Dateien.\n")
......
......@@ -21,7 +21,7 @@ setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter")
cat("####\n")
cat("At the end, all generated files are stored in the following working directory:\n") # nolint: line_length_linter.
cat(getwd(), "\n")
cat(getwd(),"/erstellte_Dateien","\n")
cat("####\n")
# load packages and source files #
......@@ -77,37 +77,47 @@ atr <- c(
#"invited",
#"reminded",
p_433442_00<- get_participants(iSurveyID = 433442,iStart=1,iLimit = 50000, bUnused=FALSE, aAttributes=atr)
p_433442_01<- get_participants(iSurveyID = 433442,iStart=50001,iLimit = 100000, bUnused=FALSE, aAttributes=atr)
cat("####\n")
cat("Der größte Wert aus der Umfrage 433442 zeigt: ")
print(max(p_433442_01$tid, na.rm = TRUE))
if(max(p_433442_01$tid, na.rm = TRUE)>=99900){
cat("Die tid der Tabelle 433442 steht kurz vor 100.000 -> nochmal im Skript schauen, damit der Ablauf passt.\n")
cat("Nachdem tid >= 100.001 wird die dritte Datei der Umfrage 433442 geladen und nicht mehr gelöscht.\n")
}
cat("####\n")
cat("\n")
#Umfrage zum Zeitpunkt der Erstellung des Skripts: 21.05.2024 noch leer
#Die Datei enhält eine Spalte mit name status : "No survey participants found."
p_433442_02 <- get_participants(iSurveyID = 433442,iStart=100001,iLimit = 150000, bUnused=FALSE, aAttributes=FALSE)
#daher: solange die Tabelle leer ist, wird sie gleich wieder gelöscht
if("status" %in% colnames(p_433442_02)){
rm(p_433442_02)
}else if (max(p_433442_02$tid, na.rm = TRUE)>=0){
cat("!!!!\n")
cat("Das Skript lädt jetzt den 3.Teil der Umfrage: 433442\n")
cat("Das aktuelle Tid beträgt:")
print(max(p_433442_02$tid, na.rm = TRUE))
cat("!!!!\n")
cat("\n")
# URSPRÜNGLICH VERWENDET::
# p_433442_00<- get_participants(iSurveyID = 433442,iStart=1,iLimit = 50000, bUnused=FALSE, aAttributes=atr)
# p_433442_01<- get_participants(iSurveyID = 433442,iStart=50001,iLimit = 100000, bUnused=FALSE, aAttributes=atr)
# Das ist aber falsch, da hier zuviele Daten geladen werden. Das iLimit gibt nicht an, bis wohin geladen wird, sondern wieviele Daten gezogen werden.
# Schleife -> nicht geschrieben
# Fehlerhafte Werte werden in nachfolgenden Prüfung wieder heraus sortiert
p_433442_00<- get_participants(iSurveyID = 433442,iStart=1,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_01<- get_participants(iSurveyID = 433442,iStart=25001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_02<- get_participants(iSurveyID = 433442,iStart=50001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_03<- get_participants(iSurveyID = 433442,iStart=75001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_04<- get_participants(iSurveyID = 433442,iStart=100001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_05<- get_participants(iSurveyID = 433442,iStart=125001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_06<- get_participants(iSurveyID = 433442,iStart=150001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_07<- get_participants(iSurveyID = 433442,iStart=175001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_08<- get_participants(iSurveyID = 433442,iStart=200001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_09<- get_participants(iSurveyID = 433442,iStart=225001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_10<- get_participants(iSurveyID = 433442,iStart=250001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_11<- get_participants(iSurveyID = 433442,iStart=275001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_12<- get_participants(iSurveyID = 433442,iStart=300001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_13<- get_participants(iSurveyID = 433442,iStart=325001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_14<- get_participants(iSurveyID = 433442,iStart=375001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
p_433442_15<- get_participants(iSurveyID = 433442,iStart=400001,iLimit = 25000, bUnused=FALSE, aAttributes=atr)
# Liste für die Prüfung und Löschung
alle_p_433442 <- mget(ls(pattern = "^p_433442_"))
for (element in names(alle_p_433442)) {
# Spalte "status" -> dann ist die Liste leer -> löschen
if ("status" %in% colnames(alle_p_433442[[element]])) {
rm(list = element, envir = .GlobalEnv)
}
}
#Zwischenliste wieder entfernen
rm(alle_p_433442)
print("p_433442_xx vollständig heruntergeladen")
p_144481_00 <- get_participants(iSurveyID = 144481,iStart=1,iLimit = 50000, bUnused=FALSE, aAttributes=atr)
print("p_144481_00 heruntergeladen")
p_538473_00<- get_participants(iSurveyID = 538473,iStart=1,iLimit = 50000, bUnused=FALSE, aAttributes=atr)
print("p_538473_00 heruntergeladen")
#erste Idee für die Weiterarbeit ####
#binden und "tid" entfernen
#token144481 <- read.csv("tokens_144481.csv")
......@@ -119,7 +129,7 @@ p_538473_00<- get_participants(iSurveyID = 538473,iStart=1,iLimit = 50000, bUnus
#alle "Test"-Zeilen entfernen
#TestTokens NUR über firstname identifizieren
#token<- token |> filter(!str_detect(tolower(firstname), 'test'))
cat("\n")
cat("####\n")
cat("Der Download wurde abgeschlossen.\n")
cat("Nun werden die heruntergeladen Tabellen verbunden.\n")
......@@ -152,7 +162,7 @@ removed_test_values <- unique_df[!unique_df$firstname %in% values_to_delete, ]
#SAS und Anführungszeichen -> entfällt hier in R #
# Umlaute ersetzen #
# encode
cleaned_df <- removed_test_values |> mutate(across(firstname | lastname,
\(x) stringr::str_replace_all(string = x,
c('ä' = 'ae',
......@@ -167,7 +177,94 @@ cleaned_df <- removed_test_values |> mutate(across(firstname | lastname,
'š' = 's',
'Ž' = 'z',
'–' = '-',
'õ' = 'oe'
'õ' = 'oe',
'ẞ' = 'ss',
'ć' = 'c',
'â' = 'a',
'ż' = 'z',
'ä' = 'ae',
'ë' = 'ee',
'ö' = 'oe',
'ü' = 'ue',
'Ä' = 'Ae',
'Ë' = 'Ee',
'Ö' = 'Oe',
'Ü' = 'Ue',
'ß' = 'ss',
'é' = 'e',
'è' = 'e',
'ê' = 'e',
'ç' = 'c',
'á' = 'a',
'à' = 'a',
'â' = 'a',
'í' = 'i',
'ì' = 'i',
'î' = 'i',
'ó' = 'o',
'ò' = 'o',
'ô' = 'o',
'ú' = 'u',
'ù' = 'u',
'û' = 'u',
'ñ' = 'n',
'ý' = 'y',
'ÿ' = 'y',
'å' = 'a',
'ø' = 'o',
'Æ' = 'Ae',
'Ø' = 'Oe',
'Å' = 'Aa',
'ą' = 'a',
'ć' = 'c',
'ę' = 'e',
'ł' = 'l',
'ń' = 'n',
'ś' = 's',
'ź' = 'z',
'ż' = 'z',
'Ą' = 'A',
'Ć' = 'C',
'Ę' = 'E',
'Ł' = 'L',
'Ń' = 'N',
'Ś' = 'S',
'Ź' = 'Z',
'Ż' = 'Z',
'č' = 'c',
'ď' = 'd',
'ě' = 'e',
'ň' = 'n',
'ř' = 'r',
'š' = 's',
'ť' = 't',
'ů' = 'u',
'ž' = 'z',
'Č' = 'C',
'Ď' = 'D',
'Ě' = 'E',
'Ň' = 'N',
'Ř' = 'R',
'Š' = 'S',
'Ť' = 'T',
'Ů' = 'U',
'Ž' = 'Z',
'⁸' = '',
'♀' = '',
'‘' = '',
'ã' = 'a',
'ğ' = 'g',
'É' = 'E',
'Á' = 'A',
'ş' = 's',
'ū' = 'u',
'ė' = 'e',
'æ' = 'ae',
'É' = 'E',
'ş' = 's',
'ı' = 'l',
'ö' = 'oe',
'!' = ''
))))
# Die nicht geladenen Spalten neu einbinden und mit festen Werten speichern #
......@@ -181,7 +278,7 @@ cleaned_df$remindercount <- "0"
cleaned_df$completed <- "N"
cleaned_df$usesleft <- "1"
#sort at the beginning of the dataframe
# sort at the beginning of the dataframe ####
list_for_email_sort <- c("Niki2007dc@gmx.com","Nadine.Glaser97@web.de","Jasmin.kroeber@gmx.de")
for (element in list_for_email_sort){
specific_rows <- cleaned_df[cleaned_df$email == element, ]
......@@ -191,6 +288,6 @@ for (element in list_for_email_sort){
setwd("P:/IMEBI/DigiHero_Teilnehmerdaten/Massenmails/tokenaufbereiter/erstellte_Dateien")
# after cleaning . start with the user query ####
function_start()