Seite 1 von 1

ifelse---HILFE

Verfasst: Do Jul 06, 2017 11:24 pm
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!

Re: ifelse---HILFE

Verfasst: Fr Jul 07, 2017 1:07 pm
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

Re: ifelse---HILFE

Verfasst: Fr Jul 07, 2017 3:32 pm
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?

Re: ifelse---HILFE

Verfasst: Fr Jul 07, 2017 4:04 pm
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

Re: ifelse---HILFE

Verfasst: Fr Jul 07, 2017 4:54 pm
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

Re: ifelse---HILFE

Verfasst: Sa Jul 08, 2017 8:36 am
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!