nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

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

Moderatoren: EDi, jogo

evelyn92
Beiträge: 18
Registriert: Sa Feb 15, 2020 5:48 pm

nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von evelyn92 »

Hallo!

Ich möchte aus meinem Datensatz namens "data_19" aus der Spalte namens "spec" nur die ersten 3 Buchstaben der einzelnen Wörter anzeigen.
In der Spalte "spec" stehen die Speciesnamen von Bäumen, also wäre ein Beispiel "Lonchocarpus macrophyllus" und ich möchte, dass da nur "Lon mac" steht.

Weiß jemand, wie ich das umsetzen kann?

Das Ganze soll dann in dem Histogramm zum Einsatz kommen mit folgendem Code:

histogram(~ height_of_diam|spec, type = "density",data = data_19, ylim = c(0,1.7), xlim = c(0,1.5),main = "Histogramm_Durchmesserverteilung",xlab = "Messhöhe_Durchmesser",ylab="Häufigkeitsverteilung")

Wie würde der Code dann letztendlich aussehen, damit es im Histogramm statt den ganzen Namen immer nur die ersten 3 Buchstaben eines Wortes anzeigt?

Danke!
LG,
Evy
Dateianhänge
Screenshot vom Histogramm.JPG
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von bigben »

Hallo!

Jörgs Variante gibt die ersten drei Buchstaben der Gattung aus, die drei Buchstaben der Art fehlen dann aber. Meine Umsetzung der Kürzungsregel um erstmal zu klären, ob das die richtige Kürzungsregel ist:

Code: Alles auswählen

library(magrittr)
nomen <- c("Bradypodion atromontanum Branch",
"Bradypodion caeruleogule minor",
"Bradypodion caffer major",
"Bradypodion damaranum lorem ipsum",
"Bradypodion dracomontanum",
"Brookesia brygooi",
"Brookesia confidens",
"Brookesia decaryi")

spec.shortened <- 
  nomen %>% 
    strsplit(" ") %>%
      lapply(function(s) substr(s, 1, 3)) %>%
        lapply(function(s) paste(s, collapse = " ")) %>%
          unlist

head(spec.shortened) # soll das so aussehen?
Die Histogramme werden wahrscheinlich lattice sein.

Im ganzen Satz also:

Code: Alles auswählen

library(lattice)

baeume <- data.frame(hoehe = rnorm(100, 20,5),
                     spec = as.character(gl(5, 20, labels=
                                       c("Lonchocarpus macrophyllus",
                                         "Lonchocarpus microphyllus",
                                         "Lonchocarpus longiphyllus",
                                         "Tyrannosaurus servus",
                                         "Lonchocarpus angustifolius"))))

shorten <- function(nomina) unlist(
      lapply(strsplit(nomina, " "), function(s) paste0(substr(s, 1, 3), collapse = " ")))

baeume$Species <- shorten(baeume$spec)

histogram(~ hoehe | Species, data = baeume, xlab="Höhe")
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von jogo »

Hallo Evelyn,

ich hatte die Aufgabe nicht richtig gelesen. Deshalb habe ich meine erste Antwort gelöscht.
Hier kommt eine Variante mit regulären Ausdrücken:

Code: Alles auswählen

nomen <- c("Bradypodion atromontanum Branch",
           "Bradypodion caeruleogule minor",
           "Bradypodion caffer major",
           "Bradypodion damaranum lorem ipsum",
           "Bradypodion dracomontanum",
           "Brookesia brygooi",
           "Brookesia confidens",
           "Brookesia decaryi")

sub("^(...)[^ ]* (...).*$", "\\1 \\2", nomen)
Danke, Bernhard, für die Beispieldaten!

Gruß, Jörg
evelyn92
Beiträge: 18
Registriert: Sa Feb 15, 2020 5:48 pm

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von evelyn92 »

Hallo!
Vielen Dank! Aber ich bin immer noch hilflos. Ich hab also noch mehr Fragen.

bigben hat geschrieben: Fr Mai 29, 2020 1:53 pm

Code: Alles auswählen

library(magrittr)
nomen <- c("Bradypodion atromontanum Branch",
"Bradypodion caeruleogule minor",
"Bradypodion caffer major",
"Bradypodion damaranum lorem ipsum",
"Bradypodion dracomontanum",
"Brookesia brygooi",
"Brookesia confidens",
"Brookesia decaryi")
Wieso sind hier die Namen aufgelistet? Ich brauch das von allen Naben in der spalte "spec", kann ich da nicht statt den Namen gleich spec hinschreiben? Aber dann brauch ich schon auch den ganzen Datensatz, in dem die spalte sec ist, oder? Könnte das vielleicht so aussehen? also ich weise quasi als ersten Schritt der Bezeichnung "nomen" (wie du es genannt hast) die Spalte spec aus dem Datensatz data_19 zu:

Code: Alles auswählen

nomen <- data_19$spec 

spec.shortened <- 
  nomen %>% 
    strsplit(" ") %>%
      lapply(function(s) substr(s, 1, 3)) %>%
        lapply(function(s) paste(s, collapse = " ")) %>%
          unlist

Hier kapier ich garnix. Warum braucht man da so viele Zwischenschritte und was bedeuten die ganzen Zeichen?

Code: Alles auswählen

head(spec.shortened) # soll das so aussehen?
Keine Ahnung!

Die Histogramme werden wahrscheinlich lattice sein.
Im ganzen Satz also:

Code: Alles auswählen

library(lattice)

baeume <- data.frame(hoehe = rnorm(100, 20,5),
                     spec = as.character(gl(5, 20, labels=
                                       c("Lonchocarpus macrophyllus",
                                         "Lonchocarpus microphyllus",
                                         "Lonchocarpus longiphyllus",
                                         "Tyrannosaurus servus",
                                         "Lonchocarpus angustifolius"))))

Was hat es hier mit hoehe und den Zahlen 100, 20, 5 auf sich?

Code: Alles auswählen

shorten <- function(nomina) unlist(
      lapply(strsplit(nomina, " "), function(s) paste0(substr(s, 1, 3), collapse = " ")))

baeume$Species <- shorten(baeume$spec)

histogram(~ hoehe | Species, data = baeume, xlab="Höhe")
Der code fürs histogramm soll gleich aussehen wie vorher, nur dass statt "data_19" der Datensatz da steht, bei dem die Namen gekürzt wurden.
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von bigben »

Hi!

Der code fürs histogramm soll gleich aussehen wie vorher, nur dass statt "data_19"der Datensatz da steht, bei dem die Namen gekürzt wurden.
Es war Deiner Frage schwer anzusehen, ob es um eine Hausaufgabe geht oder darum, einen guten Plot zu machen. Meine Antwort ist super leicht an Deine Gegebenheiten anzupassen (also einer meiner beiden Code-Blöcke), aber das geht eben nur, wenn Du Dich mit dem Code befasst und ihn teilweise verstehst.

evelyn92 hat geschrieben: Fr Mai 29, 2020 4:34 pmVielen Dank! Aber ich bin immer noch hilflos. Ich hab also noch mehr Fragen.
[...]
Der code fürs histogramm soll gleich aussehen wie vorher, nur dass statt "data_19"der Datensatz da steht, bei dem die Namen gekürzt wurden.
Fragen dazu, wie man eine Aufgabe angeht, stoßen hier immer auf offene Ohren. Fragen nach fertigem Code abzugeben, finden selten eine direkte Antwort. Das hat etwas mit unserem Selbstverständnis zu tun, dass wir gerne helfen wollen, aber nicht helfen, indem wir vorsagen.

Versuch meinen Code zu verstehen (einen von beiden Code-Blöcken) und wenn das trotz ehrlichem Bemühen nicht klappt, frag gezielt, womit Du nicht klarkommst.

LG,
Bernhard

@Jörg: Ich bin tief beeindruckt :shock:
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von jogo »

bigben hat geschrieben: Fr Mai 29, 2020 4:50 pm @Jörg: Ich bin tief beeindruckt :shock:
oh, das hab ich nicht gewollt. ;)

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

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von bigben »

Sorry Evelyn,

dass Du Deinen Post noch geändert hast, hatte ich zuspät gesehen.
evelyn92 hat geschrieben: Fr Mai 29, 2020 4:34 pmWieso sind hier die Namen aufgelistet? Ich brauch das von allen Naben in der spalte "spec", kann ich da nicht statt den Namen gleich spec hinschreiben?
[...]
Was hat es hier mit hoehe und den Zahlen 100, 20, 5 auf sich?
Ich wollte Dir vormachen, wie es geht, aber Du hattest uns keine Daten geschickt, an denen man das hätte vormachen können. Drum habe ich mir nomen und hoehe ausgedacht, um es daran vorzumachen.
Hier kapier ich garnix. Warum braucht man da so viele Zwischenschritte und was bedeuten die ganzen Zeichen?
Das Zeichen %>% stammt aus dem Paket magrittr und manche Leute finden, dass Rechnungen mit Zwischenschritten damit einfacher zu lesen sind. Wenn Du damit noch nicht vertraut bist, dann schau Dir nur mein zweites Code-Beispiel ("im ganzen Satz") an. Da habe ich darauf verzichtet und nur Basis-R verwendet.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
evelyn92
Beiträge: 18
Registriert: Sa Feb 15, 2020 5:48 pm

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von evelyn92 »

Ich danke euch beiden und versuche mal, das ganze zu verstehen! :)
Es ist mehr als eine Hausaufgabe, ich brauche das für meine Masterarbeit und es geht um große Datensätze und noch viel komlpiziertere Analysen, die auf mich zukommen. Nur leider hab ich noch nie mit R gearbeitet und muss die Programmiersprache erst lernen, die mir sehr umfangreich erscheint. Ich werde mich also in Zukunft womöglich noch öfter als hilflos erweisen :roll: :cry: :?

Ich schau mir eure Antworten nochmal genau an und versuche es zu verstehen und herumzuprobieren. Wenns nicht klappt, komm ich wieder mit konkreteren Fragen.
LG!
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von bigben »

Hallo Evelyn,
evelyn92 hat geschrieben: Fr Mai 29, 2020 5:19 pmNur leider hab ich noch nie mit R gearbeitet und muss die Programmiersprache erst lernen, die mir sehr umfangreich erscheint.
Das können wir alle nachvollziehen. R ist nicht immer anfängerfreundlich und es kommt mit einer sehr großen Standardbibliothek (batteries included), da ist die Lernkurve anfangs steil. Wir können Dir nur Mut machen, dass es sich lohnt. Jede noch so komische Datenverarbeitungsfrage findet zügig eine gute Antwort, selbst wenn sie lautet "Ich will von allen Wörtern in diesen Sätzen immer nur die ersten drei Zeichen". Und wenn Du das im Studium gelernte weiter nutzen möchtest und auch nach der Masterarbeit Daten auswerten möchtest, ist R immer kostenlos verfügbar und was Du heute lernst, wird auch ganz überwiegend in 20 Jahren noch funktionieren.
Ich schau mir eure Antworten nochmal genau an und versuche es zu verstehen und herumzuprobieren. Wenns nicht klappt, komm ich wieder mit konkreteren Fragen.
Das hört sich so an, als könne es klappen.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: nur die ersten 3 Buchstaben der Wörter aus einer Spalte auswählen

Beitrag von jogo »

Hallo Evelyn,
evelyn92 hat geschrieben: Fr Mai 29, 2020 4:34 pm Im ganzen Satz also:

Code: Alles auswählen

baeume <- data.frame(hoehe = rnorm(100, 20,5),
                     spec = as.character(gl(5, 20, labels=
                                       c("Lonchocarpus macrophyllus",
                                         "Lonchocarpus microphyllus",
                                         "Lonchocarpus longiphyllus",
                                         "Tyrannosaurus servus",
                                         "Lonchocarpus angustifolius"))))

Was hat es hier mit hoehe und den Zahlen 100, 20, 5 auf sich?
die Antworten auf diese Fragen finden sich - wie immer bei R - in der Dokumentation:

Code: Alles auswählen

?rnorm
?gl
(In RStudio kann man das Suchfeld im Reiter Help nutzen (ein Reiter vom Fenster unten rechts))
Wir können nun nicht jeden Satz aus den Dokumentationen für Dich wiederkäuen, sondern Du musst schon selber lesen.
(Als Neuling in freier Software muss man sich erst daran gewöhnen, dass eigentlich alles in den Dokumentationen steht und man deshalb viel lesen muss.)
Auch ausprobieren hilft, z.B.:

Code: Alles auswählen

rnorm(100, 20,5)
gl(5, 20, labels= c("A","B", "C", "D", "E"))
Das ist ja das Schöne an Programmiersprachen:
sie stellen ein ausreichend umfangreiches Spielzeug dar.

Gruß, Jörg
Antworten