ifelse---HILFE

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
sarah

ifelse---HILFE

Beitrag von sarah »

Hallo!
Ich bin absoluter Neuling und brauche dringend Hilfe. Ich möchte die Bodenvegetation am Wegesrand und im Bestand vergleiche. Dazu habe ich Stichproben gesammelt. Ich habe keine Pflanzen gezählt. Die Tabelle soll folgerndermaßen aussehen:
Fichte -Altholz Weg Fichte-Altholz Bestand BU-Altholz Weg BU-Altholz Bestand
Allium ursinum 1 0 0 1

Das ist nur ein Beispiel. "1"= kommt vor "0"=kommt nicht vor
Bis jetzt konnte ich nur ein dataframe erstellen indem die Bestände, Arten und die Frequency dargestellt werden. Es scheitert also daran, dass ich es nicht schaffe R mit zu teilen, dass überall wo <0 steht eine "1" hinkommen soll, andernfalls eine "0". Das habe ich mit ifelse ausprobiert. also: if(.....){print(...)}else{print(...)}. Bei meiner Ausführung kommen jetzt nur Einsen... Ich weiß nicht, ob mein Problem so nachvollziehbar ist. Falls ihr mehr infos braucht um mir zu helfen, bin ich mehr als gerne bereit diese zur Verfügung zu stellen. Ich habe das Internet schon stunden-/tagelang durchsucht, konnte aber nichts finden. Und verzeiht mir bei blöden Fragen...bin absoluter Neuling!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: ifelse---HILFE

Beitrag von jogo »

Hallo Sarah,

willkommen im Forum!
Bitte zeig uns den Output von folgenden Zeilen:

Code: Alles auswählen

str(DeinDataframe)
head(DeinDataframe)
Trotzdem schon ein kleiner Hinweis:
schau Dir mal die Funktion ifelse() an:

Code: Alles auswählen

help("ifelse")
Gruß, Jörg
sarah

Re: ifelse---HILFE

Beitrag von sarah »

str(tab_gesamt)
'data.frame': 2160 obs. of 4 variables:
$ Bestand: Factor w/ 18 levels "Ahorn-Eschen-Mischbestand Willershausen",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Lage : Factor w/ 2 levels "Bestand","Wegrand": 1 1 1 1 1 1 1 1 1 1 ...
$ Art : Factor w/ 60 levels "Ajuga reptans",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Freq : int 0 0 0 0 0 0 0 0 0 0 ...
> head(tab_gesamt)
Bestand Lage Art Freq
1 Ahorn-Eschen-Mischbestand Willershausen Bestand Ajuga reptans 0
2 Ahorn-Stangenholz Düderode Bestand Ajuga reptans 0
3 Birken-Eichen Bestand Bestand Ajuga reptans 0
4 Birken-Eichen Bestand Springe Bestand Ajuga reptans 0
5 Buchen-Altholz Bodensee Bestand Ajuga reptans 0
6 Buchen-Altholz Wiershausen Bestand Ajuga reptans 0




-------so? oder soll ich irgendwas anderes machen?
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: ifelse---HILFE

Beitrag von bigben »

Hallo,

ja, Du solltest sowas immer im code-Tags setzen ;)

Probier mal

Code: Alles auswählen

tab_gesamt$Freq_binaer <- tab_gesamt$Freq > 0
Das sollte Deinem Dataframe eine neue Spalte hinzufügen, die TRUE enthält, wenn Freq > 0 ist (oder meintest Du wirklich < 0??) und FALSE, wenn nicht. True und False werde von R beim Rechnen wie 1 und 0 verwendet, sodass Deine Frage damit beantwortet sein sollte:

Code: Alles auswählen

> FALSE * 5
[1] 0
> TRUE * 5
[1] 5
> FALSE * TRUE
[1] 0
> mean(c(FALSE, FALSE, TRUE, TRUE))
[1] 0.5
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: ifelse---HILFE

Beitrag von jogo »

sarah hat geschrieben: Fr Jul 07, 2017 3:32 pm str(tab_gesamt)
'data.frame': 2160 obs. of 4 variables:
$ Bestand: Factor w/ 18 levels "Ahorn-Eschen-Mischbestand Willershausen",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Lage : Factor w/ 2 levels "Bestand","Wegrand": 1 1 1 1 1 1 1 1 1 1 ...
$ Art : Factor w/ 60 levels "Ajuga reptans",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Freq : int 0 0 0 0 0 0 0 0 0 0 ...
> head(tab_gesamt)
Bestand Lage Art Freq
1 Ahorn-Eschen-Mischbestand Willershausen Bestand Ajuga reptans 0
2 Ahorn-Stangenholz Düderode Bestand Ajuga reptans 0
3 Birken-Eichen Bestand Bestand Ajuga reptans 0
4 Birken-Eichen Bestand Springe Bestand Ajuga reptans 0
5 Buchen-Altholz Bodensee Bestand Ajuga reptans 0
6 Buchen-Altholz Wiershausen Bestand Ajuga reptans 0
-------so? oder soll ich irgendwas anderes machen?
ja, ist schon nicht schlecht. Zur Formatierung hat Bernhard ja schon was geschrieben, siehe auch: viewtopic.php?f=20&t=29

Jetzt zurück zum Thema. Was möchtest Du jetzt machen:

Code: Alles auswählen

tab_gesamt$Freq[tab_gesamt$Freq<0] <- 1
# oder
tab_gesamt$neuFreq <- ifelse(tab_gesamt$Freq<0, 1, tab_gesamt$Freq)
:?:
Beides führt etwa zum gleichen Ergebnis; bei der zweiten Variante wird eine neue Spalte erzeugt und die Spalte $Freq bleibt unverändert.

Gruß, Jörg
sarah

Re: ifelse---HILFE

Beitrag von sarah »

Moin!
ich bin Bernhards Vorschlags gefolgt und nun schaut die Tabelle so aus:

Code: Alles auswählen

                                  Bestand    Lage           Art Freq Freq_binaer
1 Ahorn-Eschen-Mischbestand Willershausen Bestand Ajuga reptans    0       FALSE
2              Ahorn-Stangenholz Düderode Bestand Ajuga reptans    0       FALSE
3                   Birken-Eichen Bestand Bestand Ajuga reptans    0       FALSE
4           Birken-Eichen Bestand Springe Bestand Ajuga reptans    0       FALSE
5                 Buchen-Altholz Bodensee Bestand Ajuga reptans    0       FALSE
6              Buchen-Altholz Wiershausen Bestand Ajuga reptans    0       FALSE
Das ist doch genau das was ich brauchte!!! Super! Vielen dank!!! Jetzt muss ich quasi ja nur noch den Spaltennamen ändern und das sollte ich wohl hinkriegen!
Antworten