Zelleneintrag abhängig von vor-und nachfolgender Zelle

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
dino300
Beiträge: 2
Registriert: Mi Mär 25, 2020 7:00 pm

Zelleneintrag abhängig von vor-und nachfolgender Zelle

Beitrag von dino300 »

Hallo Zusammen!

Ich bin hier und im RStudio neu und hoffentlich richtig...
Seit längerem beschäftige ich mich mit dem nachstehenden Problem und habe deshalb beschlossen, hier Hilfe zu Suchen!
Aus Datenschutzgründen habe ich das Bsp etwas umgeformt, ich hoffe verständlich....

In dem Bsp gibt es die Spalten "Merkmal", "Folge" und "Identifikation".

Code: Alles auswählen

#Code:
Merkmal <- c(11,21,"-","-",13,"-",32,12,"-",22)
Folge   <- c(1,2,3,4,1,2,3,1,2,3)
#Alphatier (ID mit 11,12,13), Katze (ID mit 21,22) Maus (ID mit 32)
Identifikation <- c("Alphatier","Katze","","","Alphatier","","Maus","Alphatier","","Katze")
Tabelle <- cbind(Merkmal,Folge,Identifikation)
Die Werte in "Merkmal" haben jeweils eine fixe Zuteilung zu einer der drei "Identifikationen" (Alphatier, Katze oder Maus) - dies habe ich bereits mit ifelse erledigt (hier nur manuell)! Die Spalte "Identifikation" ist jedoch aufgrund der mangelnden Information in der Spalte "Merkmal" lückenhaft.

Es gilt jedoch: das Alphatier kann eine Gruppe mit NUR Katzen oder NUR Mäuse anführen, d.h. aus der Spalte "Folge" kann manuell auf das zugehörige Tier geschlossen werden - wir haben hier:
- Zeile 1:4 ist eine Katzengruppe mit 4 Mitgliedern
- Zeile 5:7 ist eine Mausgruppe mit 3 Mitgliedern
- Zeile 8:10 ist eine Katzengruppe mit 3 Mitgliedern.

Code: Alles auswählen

#Lösung: so sollte es aussehen
Loesung <- c("Alphatier","Katze","Katze","Katze","Alphatier","Maus","Maus","Alphatier","Katze","Katze")
Tabelle_Loesung <- cbind(Merkmal,Folge,Identifikation, Loesung)

Für meine weitere Bearbeitung benötige ich in der Spalte "Identifikation" die Lücken mit dem richtigen Tier gefüllt.
In der Theorie wäre ich es so angegangen:
1.prüfen ob Laufvariable i in Spalte "Identifikation" == 0, wenn ja
→1.1 ist i-1 == "katze", dann befülle i == "Katze"
→1.2 ist i-1 == "Maus", dann befülle i == "Maus"
→1.3 ist i+1 == "katze", dann befülle i == "Katze"
→1.4 ist i+1 == "Maus", dann befülle i == "Maus"
2.sonst Zeile leer lassen

... wie kann ich das (mit einer for Schleife???) für eine große Datenbank umsetzen? Ich wäre sehr sehr dankbar über Inputs und Infos!!!!

LG
Dateianhänge
R_Lösung.JPG
R_Lösung.JPG (24.41 KiB) 219 mal betrachtet
Zuletzt geändert von dino300 am Do Mär 26, 2020 9:24 am, insgesamt 1-mal geändert.

bigben
Beiträge: 1321
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zelleneintrag abhängig von vor-und nachfolgender Zelle

Beitrag von bigben »

dino300 hat geschrieben:
Mi Mär 25, 2020 7:29 pm
#Code:
Merkmal <- c(11,21,"-","-",13,"-",32,12,"-",22)
Folge <- c(1,2,3,4,1,2,3,1,2,3)
#Alphatier (ID mit 11,12,13), Katze (ID mit 21,22) Maus (ID mit 32)
Identifikation <- c("Alphatier","Katze","","","Alphatier","","Maus","Alphatier","","Katze")
Tabelle <- cbind(Merkmal,Folge,Identifikation)

[...]

1.prüfen ob Laufvariable i in Spalte "Identifikation" == 0, wenn ja
In der Spalte Identifikation stehen Tierarten, keine Zahlen. Deshalb wird da auch nie Null stehen. Die Idee, sich einen solchen Algorithmus auszudenken, ihn erstmal auf Deutsch zu formulieren und dann eine Schleife damit zu beschäftigen ist gut. Dann muss aber klar sein, was mit einer Laufvariable gemeint ist, ob i für die Laufvariable der for-Schleife stehen soll oder für Werte aus einer Spalte und welche Werte die Spalten einnehmen können. Wenn der Algorithmus richtig und verständlich ist, dann wird er sich auch in eine Schleife in R umschreiben lassen.

Bitte lies das hier: viewtopic.php?f=20&t=29

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

dino300
Beiträge: 2
Registriert: Mi Mär 25, 2020 7:00 pm

Re: Zelleneintrag abhängig von vor-und nachfolgender Zelle

Beitrag von dino300 »

Danke für den Hinweis bzgl der Codedarstellung Bernhard!

Ich hätte mir gedacht, dass ich eine Laufvariable der for Schleife benötige und somit jede Zelle des Vektors "Identifikation" durchgehen kann.
So in etwa:

Code: Alles auswählen

for (i in Identifikation) {
  ifelse(i-1=="Katze","Katze",
         ifelse(i-1=="Maus","Maus",
                ifelse(i+1=="Katze","Katze",
                       ifelse(i+1=="Maus","Maus",
                              ""))))
}
mit i+1 und i-1 hätte ich die vor-&nachstehende Zelle geprüft! Nur, dass dieser Code natürlich nicht funktioniert..

Meine Fragen/Unklarheiten konkret:
1. Wie kann ich das Durchlaufen der Spalte "Identifikation" mit der For-Schleife (oder auch anders) machen und
2. Wie kann ich einen Zelleneintrag abhaängig von der vorherigen bzw nachfolgenden Zelle durchführen?

Danke für eure mühen, ich weiß, dass es mit einer Anfängerin wie mir nicht leicht ist.... :?

ruedi_br
Beiträge: 84
Registriert: Do Mär 01, 2018 3:53 pm

Re: Zelleneintrag abhängig von vor-und nachfolgender Zelle

Beitrag von ruedi_br »

Für mich sind schon die nicht eindeutigen Zeilen mit Merkmal="-" und Folge=2 ein Problem. Woher soll ein Algorithmus wissen, dass im einen Fall die Lösung Maus, im anderen Katze lautet?
Dann braucht es als Merkmal ggf. noch eine Zeilennummer - in der Hoffnung, dass der Datensatz durchgehend nach der gezeigten Logik aufgebaut ist.
Grüße
Ruedi
fortune(111)

bigben
Beiträge: 1321
Registriert: Mi Okt 12, 2016 9:09 am

Re: Zelleneintrag abhängig von vor-und nachfolgender Zelle

Beitrag von bigben »

dino300 hat geschrieben:
Do Mär 26, 2020 9:58 am
Meine Fragen/Unklarheiten konkret:
1. Wie kann ich das Durchlaufen der Spalte "Identifikation" mit der For-Schleife (oder auch anders) machen

Hilft das hier?

Code: Alles auswählen

Tabelle <- data.frame(Merkmal = c(11,21,"-","-",13,"-",32,12,"-",22),
                      Folge = c(1,2,3,4,1,2,3,1,2,3),
                      Identifikation = c("Alphatier","Katze","","","Alphatier","","Maus","Alphatier","","Katze"),
                      stringsAsFactors = FALSE)

for(i in 2:(nrow(Tabelle)-1)){
  cat("\n*\nUntersuche jetzt Zeile "); cat(i)
  cat("\nin der Zeile davor ist Folge == "); cat(Tabelle[i-1, "Folge"])
  cat("\nin dieser Zeile ist Identifikation == "); cat(Tabelle[i, "Identifikation"])
  cat("\nin der Zeile danach ist Merkmal == "); cat(Tabelle[i+1, "Merkmal"])
}
Die Schleife läuft von der zweiten bis zur vorletzten Zeile durch, weil es nur für diese eine Vorgänger- und Nachfolgezeile gibt. i ist jeweils die Zeilennummer, so wie die eckigen Klammern als Zugriffsmethode auf einzelne "Zellen" sie verwenden.

HTH,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Antworten