Tabellen Selektieren

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

Moderatoren: EDi, jogo

Antworten
MSch
Beiträge: 18
Registriert: Di Mai 28, 2019 1:21 pm

Tabellen Selektieren

Beitrag von MSch »

Hallo Zusammen,

ich möchte mich im Voraus entschuldigen falls ich vielleicht ein etwas rudimentäres Probleme habe, da ich noch nicht sonderlich mit R vertraut bin und gerade noch lerne (auch in diesem Forum neu^^).

Mein aktuelles Problem bezieht sich auf das zuschneiden von Tabellen. Ich habe nämlich Rohdaten in Form einer Tabelle, wobei immer 3 aufeinanderfolgende Spalten einen zusammengehörigen Datensatz bilden. Dabei ist die erste Spalt leer und enthält lediglich den Namen als 1. Eintrag. Die 2. und 3. Spalte haben als Header Einheiten und die Spalte ist dann mit den entsprechenden Werten gefüllt.

Bsp.:

Code: Alles auswählen

Name1	Vol1	Masse1		Name2	Vol2	Masse2
NA	1.38	4.51		NA	1.32	4.64	
NA	1.32	4.55		NA	1.33	4.61	
NA	1.34	4.56		NA	1.35	4.65	
NA	1.32	4.58		NA	1.31	4.63	
Die Tabellen haben in dieser Form immer so 30-40 Datensätze. Mich interessiert nun wie ich am besten immer die 3 Spalten zusammen Exportiere. Also z.B. ich hätte gern die Datensätze von Name1, Name5 und Name6. Bisher verwende ich den select-befehl auf den Namen aber mir gelingt es nicht die folgenden 2 Spalten dazu zu bekommen.

LG Michael
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabellen Selektieren

Beitrag von jogo »

Hallo Michael,

willkommen im Forum!
Meinst Du sowas?

Code: Alles auswählen

df <- read.table(header=TRUE, text=
"Name1	Vol1	Masse1		Name2	Vol2	Masse2
NA	1.38	4.51		NA	1.32	4.64	
NA	1.32	4.55		NA	1.33	4.61	
NA	1.34	4.56		NA	1.35	4.65	
NA	1.32	4.58		NA	1.31	4.63")

mySel <- function(name) {
  i <- which(names(df)==name)
  df[(i+1):(i+2)]
}

mySel("Name1")
mySel("Name2")
Gruß, Jörg
MSch
Beiträge: 18
Registriert: Di Mai 28, 2019 1:21 pm

Re: Tabellen Selektieren

Beitrag von MSch »

Wow Jörg, das ging ja wirklich schnell! Danke gleich mal.

Leider verstehe ich dein Skript nicht ganz und konnte ihn nicht in mein Skript funktionstüchtig überführen daher weiß ich nicht ob es genau das ist was ich wollte.

Ich verstehe das so:

mySel soll die neue Tabelle sein. Dann definierst du in der function die Variable i mit dem Wert des gesuchten Eintrages z.B. Name3 wäre dann an der 7. Stelle also i=7 und übergibst dann mit df[(i+1):(i+2)] den 7+1 ten und 7+2 ten Eintrag an mySel?


wenn ja dann ist es genau das was ich will ^^



EDIT:


Ich glaube das Problem bei mir ist, dass ich nur einen Teil des Namens suche. Also suche ich nur nach Name1 wobei der eintrage Ade12312_Name1_asdf123 z.B. ist
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabellen Selektieren

Beitrag von jogo »

Hallo Michael,
MSch hat geschrieben: Di Mai 28, 2019 2:43 pm Ich verstehe das so:

mySel soll die neue Tabelle sein.
nein, mySel ist eine Funktion, sie bekommt den Namen des Tabellenteils als Parameter name= geliefert.
Dann definierst du in der function die Variable i mit dem Wert des gesuchten Eintrages z.B. Name3 wäre dann an der 7. Stelle also i=7
ja
und übergibst dann mit df[(i+1):(i+2)] den 7+1 ten und 7+2 ten Eintrag an mySel?
nein. Das Objekt df[(i+1):(i+2)] ist der Rückgabewert der Funktion. Ich hätte dort auch return(df[(i+1):(i+2)]) schreiben können.

wenn ja dann ist es genau das was ich will ^^
da waren jetzt zwei "nein" dabei. Ich könnte mir aber trotzdem vorstellen, dass Du dies haben möchtest. ;)
EDIT:


Ich glaube das Problem bei mir ist, dass ich nur einen Teil des Namens suche. Also suche ich nur nach Name1 wobei der eintrage Ade12312_Name1_asdf123 z.B. ist
oh, dann muss ich nochmal nacharbeiten ...

Code: Alles auswählen

df <- read.table(header=TRUE, text=
"Name1	Vol1	Masse1		Name2	Vol2	Masse2
NA	1.38	4.51		NA	1.32	4.64	
NA	1.32	4.55		NA	1.33	4.61	
NA	1.34	4.56		NA	1.35	4.65	
NA	1.32	4.58		NA	1.31	4.63")

mySel <- function(name) {
  i <- which(grepl(name, names(df), fixed=TRUE))
  df[(i+1):(i+2)]
}

mySel("me1")
mySel("me2")
Bei Dir wäre das dann z.B. mySel("_Name1_") und so.

Code: Alles auswählen

grepl("_Name1_", c("Ade12312_Name1_asdf123", "xxx"), fixed=TRUE) ### Test
Gruß, Jörg
MSch
Beiträge: 18
Registriert: Di Mai 28, 2019 1:21 pm

Re: Tabellen Selektieren

Beitrag von MSch »

Hi Jörg,

super es klappt so wie ich es mir etwa vorgestellt habe. Vielen Dank!!

PS.: Da ich ein recht großes Projekt mit R hier anfange werde ich mich sicher noch ein paar mal melden
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabellen Selektieren

Beitrag von jogo »

Hallo Michael,

prima.
Hauptsache, es werden nicht zu viele Teiltabellen nebeneinander. Wenn doch, sollte man sich um die Datenverwaltung Gedanken machen, damit man die Struktur nicht verliert, etwa so:

Code: Alles auswählen

Namen <- c("me1", "me2")
L <- lapply(Namen, FUN=mySel) # Liste der Dataframes
Gruß, Jörg
MSch
Beiträge: 18
Registriert: Di Mai 28, 2019 1:21 pm

Re: Tabellen Selektieren

Beitrag von MSch »

Also mein Einlesen und das Raussuchen der Datensätze klappt schon mal alles gut. Auch in die lapply lässt es sich einfügen. Ein Problem habe ich noch mit den Namen. Ich möchte nun die Einträge mit der Liste nach dem Vektor benennen (hier der Vektor Namen <- c("me1", "me2")).

Mit USE.NAMES = TRUE scheint es nicht zu klappen und ich kapiere die Hilfe in R Studio dazu nicht wirklich
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabellen Selektieren

Beitrag von jogo »

Hallo Michael,

Code: Alles auswählen

Namen <- c("me1", "me2")
L <- lapply(Namen, FUN=mySel) # Liste der Dataframes
names(L) <- Namen
Gruß, Jörg
Antworten