Spalte anlegen

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

Moderatoren: EDi, jogo

Antworten
Wurzel
Beiträge: 20
Registriert: So Apr 02, 2017 7:12 pm

Spalte anlegen

Beitrag von Wurzel »

Hallo, ich möchte in R Studio eine Tabelle um eine Beobachtung erweitern. Wir haben Bäume zu paaren zusammen gefasst

Code: Alles auswählen

Team1<-c(1,5,9)
Team2<-c(2,4,7)

aus einer Liste und nun möchte ich einfach die Prozente der verpaarten wissen. Dazu möchte ich einfach nur eine Spalte anlegen. Das klang für mich erstmal einfach. Ich habs mit verschiedenen mir a lá Excel logisch erscheinenden Befehlen versucht, wie

Code: Alles auswählen

if(datei$ID=="Team1"){
  (datei$Team<- "YES")
}
oder

Code: Alles auswählen

for (n in 1:nrow(datei)) {Team[n] <- "yes"[datei$ID==Team1[n]]}
aber habe es maximal erreicht, dass die Spalte Team komplett mit YES ausgefüllt war.
Ich habe auch versucht, dass R die Teams nicht mit dem Datensatz abgleichen muss, sondern mit einem Vektor, den ich erst mit den IDs aus dem Hauptdatensatz gefüllt habe, was auch nicht klappte. Ich könnte mir vorstellen, dass der Fehler mit der Vergleichbarkeit der Datensätze zu tun hat, habe mich als Anfänger glaube ich total verrannt.
Also kurz: R soll nur abgleichen, ob die ID aus dem Datensatz in einer der Teams vorkommt und falls ja ein "YES" in eine neue Spalte schreiben.
Ich möchte an dieser Stelle nicht erwähnen, wie viele Tage ich bereits in dieses Ploblem gesteckt habe. :oops:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Spalte anlegen

Beitrag von jogo »

Wurzel hat geschrieben: Mi Mai 17, 2017 2:00 pm Hallo, ich möchte in R Studio eine Tabelle um eine Beobachtung erweitern. Wir haben Bäume zu paaren zusammen gefasst

Code: Alles auswählen

Team1<-c(1,5,9)
Team2<-c(2,4,7)

aus einer Liste und nun möchte ich einfach die Prozente der verpaarten wissen. Dazu möchte ich einfach nur eine Spalte anlegen. Das klang für mich erstmal einfach. Ich habs mit verschiedenen mir a lá Excel logisch erscheinenden Befehlen versucht, wie

Code: Alles auswählen

if(datei$ID=="Team1"){
  (datei$Team<- "YES")
}
Du meinst:

Code: Alles auswählen

datei$Team <- ifelse(datei$ID=="Team1", "YES", "no")
aber habe es maximal erreicht, dass die Spalte Team komplett mit YES ausgefüllt war.
klar, weil in der ersten Zeile datei$ID[1]=="Team1". Es müsste bei Deiner Konstruktion eine Meldung von R gegeben haben. Hast Du uns diese unterschlagen?
Ich habe auch versucht, dass R die Teams nicht mit dem Datensatz abgleichen muss, sondern mit einem Vektor, den ich erst mit den IDs aus dem Hauptdatensatz gefüllt habe, was auch nicht klappte. Ich könnte mir vorstellen, dass der Fehler mit der Vergleichbarkeit der Datensätze zu tun hat, habe mich als Anfänger glaube ich total verrannt.
Also kurz: R soll nur abgleichen, ob die ID aus dem Datensatz in einer der Teams vorkommt und falls ja ein "YES" in eine neue Spalte schreiben.
Ich möchte an dieser Stelle nicht erwähnen, wie viele Tage ich bereits in dieses Ploblem gesteckt habe. :oops:
kannst Du das mit Deinen Daten zeigen, was getan werden soll?

Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Spalte anlegen

Beitrag von bigben »

Hallo Wurzel,

wie jogo schon schrieb: Erkläre uns mal in Ruhe, wie Deine Daten aussehen, und was Du eigentlich machen willst. Der Vergleich mit Excel führt häufig zu unnötig komplizierten Lösungswegen, die in R einfacher möglich sind. Beispiel:
Wurzel hat geschrieben: Mi Mai 17, 2017 2:00 pmund nun möchte ich einfach die Prozente der verpaarten wissen.
Wenn Du wissen möchtest, wie oft welcher Eintrag in Team1 mit welchem Eintrag in Team2 einher geht, dann brauchst Du keine neuen Spalten anzulegen, sondern kannst folgenden Einzeiler verwenden:

Code: Alles auswählen

> Team1<-c(1,5,9, 1,1,9)
> Team2<-c(2,4,7, 2,2,2)
> 
> table(Team1, Team2)
     Team2
Team1 2 4 7
    1 3 0 0
    5 0 1 0
    9 1 0 1
Diese Tabelle sagt Dir, dass eine eine 1 in Team1 dreimal neben einer 2 in Team2 steht aber nie neben einer 4 oder einer 7. Auf Wunsch geht das fast genauso schnell auch in Prozenten:

Code: Alles auswählen

Team1<-c(1,5,9, 1,1,9)
Team2<-c(2,4,7, 2,2,2)

table(Team1, Team2)/length(Team1)*100
Lass uns also genau wissen, was Du eigentlich machen willst und nicht, wie Du das in Excel angehen würdest. Wenn eine Tabelle mit Deinen Daten "datei" heißt, dann poste bitte auch das Ergebnis von

Code: Alles auswählen

str(datei)
Das hilft regelmäßig sehr beim Beantworten von Fragen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Wurzel
Beiträge: 20
Registriert: So Apr 02, 2017 7:12 pm

Re: Spalte anlegen

Beitrag von Wurzel »

Ich glaub, da war ich zu tief drin. Vorab, dies ist eine Vereinfachung, da der Hauptdatensatz zu groß wäre.

Auf der Fläche stehen 10 Bäume, davon sind 3 verbunden.

Code: Alles auswählen

Team1<-c(1,5,9)
Team2<-c(2,4,7)
1 mit 2, 5 mit 4, 9 mit 7. Das ist im Original größer. Hier kann ich sehen, dass es dann 60% von der Grundgesamtheit wäre, ich selbst muss dann noch untergliedern nach Baumart und Standort. Ich möchte ja selbst lernen was machen, drum habe ich das nur so exemplarisch dargestellt. Somit sind die behandelten Paare nur 3, also 6 von 10 Individuen. Die restlichen 4 werden einfach nicht behandelt.
der nächste Schritt war sonst

Code: Alles auswählen

Trees<-as.data.frame(cbind(Team1,Team2))
Aber dann habe ich wieder einen data frame und mir schien es, als läge hier das Problem, das es nur mit numeric vectors funktionieren könnte.

zu Jojo: Ja, jetzt funktioniert es!
...etwas.

Code: Alles auswählen

if(datei$ID[1]=="Team1"){
    (datei$Team<- "YES")
  }
Was macht diese [1] denn? Ist das gleich wie [x]? Problem: Ich habe nun nur "YES" überall.
Du meinst:

Code: Alles auswählen

datei$Team <- ifelse(datei$ID=="Team1", "YES", "no")
Hier wiederum bekomme ich nur "no". Das ist ja wie ich anfangs meinte, am Ende will ich bei 6 von den 10en ein Yes stehen, haben, dass sie im Team sind. Ich hatte zuvor und auch grade nochmal die ifelse Funktion in The R Book nachgelesen und verstehe nicht, wieso sie nicht funktioniert. Meine Vermutung: Weil ich ein data frame mit einem numerischen Vektor abgleiche oder weil mein Data frame länger ist als mein Vektor.

Tut mir Leid, wenn ich mich undeutlich ausgedrück habe. Hab versucht die Kritik an meinem letzten Post umzusetzen.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Spalte anlegen

Beitrag von jogo »

Wurzel hat geschrieben: Mi Mai 17, 2017 4:13 pm Ich glaub, da war ich zu tief drin. Vorab, dies ist eine Vereinfachung, da der Hauptdatensatz zu groß wäre.
Du könntest ihn reduzieren, z.B.

Code: Alles auswählen

head(datei, 30) # besser noch:
dput(head(datei, 30))
Bitte lies: viewtopic.php?f=20&t=11
der nächste Schritt war sonst

Code: Alles auswählen

Trees<-as.data.frame(cbind(Team1,Team2))
Aber dann habe ich wieder einen data frame und mir schien es, als läge hier das Problem, das es nur mit numeric vectors funktionieren könnte.
hm, ohne Daten können wir schlecht sehen, was sonst noch in Deinem Dataframe auftaucht.
Mit Dataframes kann man viele tolle Sachen machen - eigentlich sind sie ideal, um die tabellarischen Daten zusammen zu halten.
zu Jojo: Ja, jetzt funktioniert es!
...etwas.

Code: Alles auswählen

if(datei$ID[1]=="Team1"){
    (datei$Team<- "YES")
  }
Was macht diese [1] denn? Ist das gleich wie [x]? Problem: Ich habe nun nur "YES" überall.
Es ist etwas ziemlich Grundlegendes: Indizierung.
Bitte lies eine Einführung zu R und schau Dir den Hilfetext zu '[' an:

Code: Alles auswählen

help('[')
Du meinst:

Code: Alles auswählen

datei$Team <- ifelse(datei$ID=="Team1", "YES", "no")
Hier wiederum bekomme ich nur "no". Das ist ja wie ich anfangs meinte, am Ende will ich bei 6 von den 10en ein Yes stehen, haben, dass sie im Team sind. Ich hatte zuvor und auch grade nochmal die ifelse Funktion in The R Book nachgelesen und verstehe nicht, wieso sie nicht funktioniert. Meine Vermutung: Weil ich ein data frame mit einem numerischen Vektor abgleiche oder weil mein Data frame länger ist als mein Vektor.
ohne Ansicht der Daten sage ich dazu nichts - das wäre reine Spekulation.

Gruß, Jörg
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Spalte anlegen

Beitrag von bigben »

Wurzel hat geschrieben: Mi Mai 17, 2017 4:13 pm Auf der Fläche stehen 10 Bäume, davon sind 3 verbunden.

Code: Alles auswählen

Team1<-c(1,5,9)
Team2<-c(2,4,7)
1 mit 2, 5 mit 4, 9 mit 7. Das ist im Original größer. Hier kann ich sehen, dass es dann 60% von der Grundgesamtheit wäre, ich selbst muss dann noch untergliedern nach Baumart und Standort.
Es kommen insgesamt 6 verschiedene Bäume in Team1 und Team2 vor, und Du möchtest wissen, wieviele verschiedene Bäume überhaupt vorkommen. Habe ich das richtig verstanden?

Das würde ich in R so machen: Team1 und Team2 in einen gemeinsamen Vektor werfen, R beauftragen, alle doppelt oder mehrfach vorkommenden Werte zu löschen und dann die Zahl der einzigartigen Baumnummer zu zählen.

Code: Alles auswählen

Team1<-c(1,5,9)
Team2<-c(2,4,7)

length( unique( c(Team1, Team2) ) )
In diesem Fall kommt 6 heraus und mit dem Wissen, dass es 10 Bäume gibt, sind das 6/10 = 60%.

Habe ich die Aufgabenstellung richtig verstanden? Sonst erkläre bitte nochmal genau, was Du mit Deinen verpaarten Bäumen machen willst.

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