Hallo, ich habe folgendes Problem. Ich habe eine Datei, die ich History nenne, erstellt. Auf Blatt 1 sind 20 Spalten mit 20 Namen betitelt. Jede Zeile besteht aus 20 Zahlen, sprich jede Zeile hat 20 mal 20 Zahlen. Das ist soweit auch alles korrekt. Insgesamt sind es über 1000 Zeilen, die diese Anzahl an Zahlen besitzen. Mein Ziel ist es jedoch, dass auf Blatt 2 die Wiederholungen angezeigt werden, die an diversen Tagen vorkommen. Also, wenn in Zeile 2, 5, 8, 32, 66 in diversen Spalten Wiederholungen vorkommen, dann möchte ich, dass diese auf Blatt 2 unter einem Muster gespeichert werden. Sprich auf Blatt 2 sind ebenfalls die Spaltennamen von Blatt + Spaltenname für die Häufigkeit der Wiederholungen und eine Spalte für die Zuordnung der Zeilen. Das Problem ist, dass egal was ich probiere, die Schleife nicht richtig arbeitet. Entweder spinnt diese total und macht völlig falsche Ergebnisse, mal findet sie auch keine oder wie in meinem jetzigen Fall: Sie vergleicht Zeile 2 bis 6, Zeile 3 bis 7, Zeile 4 bis 8, aber Zeile 2 mit dem kompletten Datensatz ist nicht drin, genau so wie mit den anderen.
Ich zeige euch mal den Code bzw Ausschnitte davon:
calculate_plus_and_patterns_improved <- function(historical_data, min_repeats = 5) {
# Erstelle ein leeres DataFrame für die Ergebnisse mit korrekten Überschriften
results <- data.frame(matrix(ncol = 23, nrow = 0))
colnames(results) <- c(paste0("plus", 1:20), "Häufigkeit", "Tage", "Kombination")
# Extrahiere Plus-Werte aus den historischen Daten
all_plus_combinations <- list()
for (tag in 1:nrow(historical_data)) {
plus_values <- list()
for (i in 1:20) {
plus_column <- paste0("plus", i)
plus_values[] <- tryCatch({
as.numeric(unlist(strsplit(as.character(historical_data[[plus_column]][tag]), ",")))
}, error = function(e) {
warning("Fehler bei der Konvertierung von plus_values an Tag ", tag, ": ", conditionMessage(e))
return(NA)
})
}
all_plus_combinations[[tag]] <- plus_values
}
# Debugging: Anzahl der gespeicherten Plus-Kombinationen anzeigen
cat("Anzahl der gespeicherten Plus-Kombinationen: ", length(all_plus_combinations), "\n")
# Verfolge Muster und deren Tage
pattern_dict <- list()
# Iteriere über alle möglichen Starttage
for (start_day in 1length(all_plus_combinations) - min_repeats + 1)) {
cat("Verarbeite Starttag: ", start_day, "\n") # Debugging-Ausgabe
# Iteriere über alle möglichen Mustermengen ab min_repeats und begrenze das Ende der Schleife
for (pattern_length in min_repeatslength(all_plus_combinations) - start_day + 1)) {
pattern_found <- list()
# Vergleiche die Plus-Werte für den Bereich der Tage
for (i in 1:20) {
common_values <- NULL
for (day in start_daystart_day + pattern_length - 1)) {
# Sicherheitsabfrage, um sicherzustellen, dass der Index innerhalb der Grenzen liegt
if (day <= length(all_plus_combinations)) {
if (is.null(common_values)) {
common_values <- all_plus_combinations[[day]][]
} else {
common_values <- intersect(common_values, all_plus_combinations[[day]][])
}
} else {
warning("Tag ", day, " liegt außerhalb der Grenzen von all_plus_combinations")
}
}
# Überprüfe, ob common_values existiert und nicht leer ist
if (!is.null(common_values) && length(common_values) > 0 && !all(is.na(common_values))) {
pattern_found[[length(pattern_found) + 1]] <- list(zahl_spalte = i, values = common_values)
}
}
# Speichere das Muster, wenn es genügend Wiederholungen gibt
if (length(pattern_found) > 0) {
pattern_key <- paste(sapply(pattern_found, function(x) paste(x$zahl_spalte, collapse = ",")), collapse = ";")
if (is.null(pattern_dict[[pattern_key]])) {
pattern_dict[[pattern_key]] <- list(days = start_daystart_day + pattern_length - 1), pattern_found = pattern_found)
cat("Muster gefunden zwischen Tag ", start_day, " und Tag ", start_day + pattern_length - 1, "\n") # Debugging-Ausgabe
} else {
pattern_dict[[pattern_key]]$days <- unique(c(pattern_dict[[pattern_key]]$days, start_daystart_day + pattern_length - 1)))
}
}
}
}
# Filtere Muster, die die Mindestanzahl von Wiederholungen erreichen
for (pattern in pattern_dict) {
if (length(pattern$days) >= min_repeats) {
combination <- rep(NA, 20)
for (p in pattern$pattern_found) {
combination[p$zahl_spalte] <- paste("Plus", paste(p$values, collapse = ","))
}
new_row <- c(combination, length(pattern$days), paste(pattern$days, collapse = ","), paste("Muster", nrow(results) + 1))
results <- rbind(results, new_row)
}
}
# Debugging: Anzahl der gefundenen Muster anzeigen
cat("Anzahl der gefundenen Muster: ", nrow(results), "\n")
return(results)
}
# Lade die Excel-Datei mit historischen Daten
historical_data <- read.xlsx("...", sheet = 1)
# Berechnung der Plus-Werte und Identifizierung von Mustern
frequent_patterns_improved_df <- calculate_plus_and_patterns_improved(historical_data, min_repeats = 5)
# Ausgabe der ersten Zeilen zur Überprüfung
print(head(frequent_patterns_improved_df))
# Überprüfe die Anzahl der Zeilen vor dem Speichern
cat("Zeilen im DataFrame nach der Berechnung: ", nrow(frequent_patterns_improved_df), "\n")
# Ergebnisse in einer Excel-Datei speichern
if (nrow(frequent_patterns_improved_df) > 0) {
write.xlsx(list(Blatt1_Historische_Daten = historical_data, Blatt2_Plusrechnungen = frequent_patterns_improved_df),
"...")
cat("Datei wurde erfolgreich gespeichert.\n")
} else {
cat("Es wurden keine Muster gefunden, Datei wurde nicht gespeichert.\n")
}
Ich dreh noch durch. Selbst die Google KI gab mir nur falsche Änderungen.
Das da jetzt Smileys zu sehen sind war keine Absicht ^^
Ich zeige euch mal den Code bzw Ausschnitte davon:
calculate_plus_and_patterns_improved <- function(historical_data, min_repeats = 5) {
# Erstelle ein leeres DataFrame für die Ergebnisse mit korrekten Überschriften
results <- data.frame(matrix(ncol = 23, nrow = 0))
colnames(results) <- c(paste0("plus", 1:20), "Häufigkeit", "Tage", "Kombination")
# Extrahiere Plus-Werte aus den historischen Daten
all_plus_combinations <- list()
for (tag in 1:nrow(historical_data)) {
plus_values <- list()
for (i in 1:20) {
plus_column <- paste0("plus", i)
plus_values[] <- tryCatch({
as.numeric(unlist(strsplit(as.character(historical_data[[plus_column]][tag]), ",")))
}, error = function(e) {
warning("Fehler bei der Konvertierung von plus_values an Tag ", tag, ": ", conditionMessage(e))
return(NA)
})
}
all_plus_combinations[[tag]] <- plus_values
}
# Debugging: Anzahl der gespeicherten Plus-Kombinationen anzeigen
cat("Anzahl der gespeicherten Plus-Kombinationen: ", length(all_plus_combinations), "\n")
# Verfolge Muster und deren Tage
pattern_dict <- list()
# Iteriere über alle möglichen Starttage
for (start_day in 1length(all_plus_combinations) - min_repeats + 1)) {
cat("Verarbeite Starttag: ", start_day, "\n") # Debugging-Ausgabe
# Iteriere über alle möglichen Mustermengen ab min_repeats und begrenze das Ende der Schleife
for (pattern_length in min_repeatslength(all_plus_combinations) - start_day + 1)) {
pattern_found <- list()
# Vergleiche die Plus-Werte für den Bereich der Tage
for (i in 1:20) {
common_values <- NULL
for (day in start_daystart_day + pattern_length - 1)) {
# Sicherheitsabfrage, um sicherzustellen, dass der Index innerhalb der Grenzen liegt
if (day <= length(all_plus_combinations)) {
if (is.null(common_values)) {
common_values <- all_plus_combinations[[day]][]
} else {
common_values <- intersect(common_values, all_plus_combinations[[day]][])
}
} else {
warning("Tag ", day, " liegt außerhalb der Grenzen von all_plus_combinations")
}
}
# Überprüfe, ob common_values existiert und nicht leer ist
if (!is.null(common_values) && length(common_values) > 0 && !all(is.na(common_values))) {
pattern_found[[length(pattern_found) + 1]] <- list(zahl_spalte = i, values = common_values)
}
}
# Speichere das Muster, wenn es genügend Wiederholungen gibt
if (length(pattern_found) > 0) {
pattern_key <- paste(sapply(pattern_found, function(x) paste(x$zahl_spalte, collapse = ",")), collapse = ";")
if (is.null(pattern_dict[[pattern_key]])) {
pattern_dict[[pattern_key]] <- list(days = start_daystart_day + pattern_length - 1), pattern_found = pattern_found)
cat("Muster gefunden zwischen Tag ", start_day, " und Tag ", start_day + pattern_length - 1, "\n") # Debugging-Ausgabe
} else {
pattern_dict[[pattern_key]]$days <- unique(c(pattern_dict[[pattern_key]]$days, start_daystart_day + pattern_length - 1)))
}
}
}
}
# Filtere Muster, die die Mindestanzahl von Wiederholungen erreichen
for (pattern in pattern_dict) {
if (length(pattern$days) >= min_repeats) {
combination <- rep(NA, 20)
for (p in pattern$pattern_found) {
combination[p$zahl_spalte] <- paste("Plus", paste(p$values, collapse = ","))
}
new_row <- c(combination, length(pattern$days), paste(pattern$days, collapse = ","), paste("Muster", nrow(results) + 1))
results <- rbind(results, new_row)
}
}
# Debugging: Anzahl der gefundenen Muster anzeigen
cat("Anzahl der gefundenen Muster: ", nrow(results), "\n")
return(results)
}
# Lade die Excel-Datei mit historischen Daten
historical_data <- read.xlsx("...", sheet = 1)
# Berechnung der Plus-Werte und Identifizierung von Mustern
frequent_patterns_improved_df <- calculate_plus_and_patterns_improved(historical_data, min_repeats = 5)
# Ausgabe der ersten Zeilen zur Überprüfung
print(head(frequent_patterns_improved_df))
# Überprüfe die Anzahl der Zeilen vor dem Speichern
cat("Zeilen im DataFrame nach der Berechnung: ", nrow(frequent_patterns_improved_df), "\n")
# Ergebnisse in einer Excel-Datei speichern
if (nrow(frequent_patterns_improved_df) > 0) {
write.xlsx(list(Blatt1_Historische_Daten = historical_data, Blatt2_Plusrechnungen = frequent_patterns_improved_df),
"...")
cat("Datei wurde erfolgreich gespeichert.\n")
} else {
cat("Es wurden keine Muster gefunden, Datei wurde nicht gespeichert.\n")
}
Ich dreh noch durch. Selbst die Google KI gab mir nur falsche Änderungen.
Ergänzung ()
Das da jetzt Smileys zu sehen sind war keine Absicht ^^