Tabelle zusammenstellen

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

Moderatoren: EDi, jogo

Antworten
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Tabelle zusammenstellen

Beitrag von wbart »

Hallo,
ich habe sieben Tabellen. Eine Spalte könnte jeweils als ID dienen. Die Tabellen sind alle gleich aufgebaut nur die Inhalte betreffen jeweils einen anderen Kontext. Nun versuche ich aus diesen Tabellen einzelne Spalten zu einer neuen Tabelle zu kombinieren. Also zum Beispiel Spalten 1 und zwei aus Tabelle 1 mit der Spalte 5 der restlichen Tabellen. Wie mache ich das? Gibt es eine Möglichkeit das auf einen Schlag zu programieren oder kann ich immer nur zwei Tabellen kombinieren?

Vielen Dank

MfG
wbart
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Tabelle zusammenstellen

Beitrag von EDi »

Alles eine liste packen und mit lapply drüberlaufen-ist eine generelle Herangehensweise.
data. table:rbindlist() ist auch oft hilfreich.

Ohne eine reproduzierbares Beispiel kann ich leider nicht mehr sagen.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabelle zusammenstellen

Beitrag von jogo »

Hallo wbart,

willkommen im Forum!
Wie EDi schon schrieb:
das Ablegen der Dataframes in einer Liste ist die Basis für alles andere:

Code: Alles auswählen

L <- list(df1, df2, df3, df4, df5, df6, df7)
Dann kann man Abläufe automatisieren. Die üblichen Wergzeuge sind sapply(), lapply(), mapply(), Map(), Reduce(), do.call() u.a., z.B.:

Code: Alles auswählen

L <- list(iris, iris, iris)
as.data.frame(mapply('[', L, list(2:3, 1, 5)))
Gruß, Jörg
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Tabelle zusammenstellen

Beitrag von wbart »

Vielen herzlichen Dank. Das probiere ich gleich aus!
Viele Grüße
wbart
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Tabelle zusammenstellen

Beitrag von wbart »

Schwieriger als gedacht. Deshalb schiebe ich noch mal ein paar Details hinterher. Die Tabellen sehen wie folgt aus:

Tabelle 1:

"Sequence.ID" "Primary.Sequence.Name" "Sequence.Description" "Ratio P1" "Fold.Change P1" "Klasse"
1
2
3
4
.
.
.

Tabelle 2
"Sequence.ID" "Primary.Sequence.Name" "Sequence.Description" "Ratio P2" "Fold.Change P2" "Klasse"
1
2
3
4
.
.
.

etc. lediglich die Spaltennamen von Ratio und Fold.Change ändern sich durch einen Präfix. Es gibt noch 5 weiter Tabellen dieser Art.

als Ziel möchte ich eine Tabelle mit den ersten 3 Spalten aus Tabelle 1 (in diesem Fall sind die ersten drei Spalten immer gleich, generell wäre aber ein zusammenfügen im Sinne eines full outer Joins sinnvoll) plus alle Ratio Daten

"Sequence.ID" "Primary.Sequence.Name" "Sequence.Description" "Ratio P1" "Ratio P2" "Ratio M1" "Ratio M2"
2
3
4
.
.
.

Die Liste konnte ich noch erstellen aber mit mapply kam ich nicht zurecht und warum as.dataframe?
Sorry aber ich fange gerade erst an :)

VG
Werner
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabelle zusammenstellen

Beitrag von jogo »

Hallo Werner,
wbart hat geschrieben: Mi Apr 18, 2018 10:21 am Schwieriger als gedacht. Deshalb schiebe ich noch mal ein paar Details hinterher. Die Tabellen sehen wie folgt aus:
...
als Ziel möchte ich eine Tabelle mit den ersten 3 Spalten aus Tabelle 1 (in diesem Fall sind die ersten drei Spalten immer gleich, generell wäre aber ein zusammenfügen im Sinne eines full outer Joins sinnvoll) plus alle Ratio Daten
https://stackoverflow.com/questions/129 ... left-right
Die Liste konnte ich noch erstellen aber mit mapply kam ich nicht zurecht und warum as.dataframe?
Welche Probleme gab es mit mapply()? Sind Deine Dataframes verschieden lang?
Wenn ja, dann wird das Zusammensammeln der Spalten mit mapply() so nicht funktionieren.
In meinem Beispiel (es ist auch bei Dir ausführbar!) kannst Du doch probeweise as.data.frame() weglassen und wirst dann feststellen, dass Du als Ergebnis eine Liste mit drei Elementen bekommst - also keinen Dataframe.

Gruß, Jörg
wbart
Beiträge: 89
Registriert: Fr Mär 16, 2018 4:08 pm

Re: Tabelle zusammenstellen

Beitrag von wbart »

Hallo Jogo,

ich habe z.B. folgendes eingegeben:

> Test <- as.data.frame(mapply("[", L, list(1:3,4)))

Warning message:
In mapply("[", L, list(1:3, 4)) :
longer argument not a multiple of length of shorter


Kontrolle ergab:

> names(Test)
[1] "Sequence.ID" "Primary.Sequence.Name" "Sequence.Description" "Ratio.P2"
[5] "Sequence.ID.1" "Primary.Sequence.Name.1" "Sequence.Description.1" "Ratio.M1"
[9] "Sequence.ID.2" "Primary.Sequence.Name.2" "Sequence.Description.2" "Ratio.Q1"
[13] "Sequence.ID.3" "Primary.Sequence.Name.3" "Sequence.Description.3"

Erstes Problem die ersten drei Spalten tauchen mehrmals auf. Zweites Problem es fehlen vier Spalten mit Ratios.
Die Warnung zeigt mir, das das ich ungleiche Verhältnisse habe. Was bedeutet longer Argument was length of shorter?
Ich habe leere Zellen in der Tabelle. Kann das damit zu tun haben? Anzahl der Zeilen und Spalten ist gleich.
Was genau macht die Funktion "[" ?
Die Argumente in list() sind mir nicht klar. Wie kann ich ihm sagen, dass aus der Liste Tabelle x mit Spalte a und Tabelle Y mit Spalte b gemeint ist.
Oder funktioniert der ganze Term ganz anders?

VG
wbart
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Tabelle zusammenstellen

Beitrag von jogo »

Hallo Werner,
wbart hat geschrieben: Mi Apr 18, 2018 12:53 pm
> Test <- as.data.frame(mapply("[", L, list(1:3,4)))

Warning message:
In mapply("[", L, list(1:3, 4)) :
longer argument not a multiple of length of shorter


Kontrolle ergab: ...
hier wäre der Vergleich wichtig:

Code: Alles auswählen

length(L) ## gegenüber
length(list(1:3, 4))  ## hier sollte das Ergebnis 2 sein!
Die Warnung zeigt mir, das das ich ungleiche Verhältnisse habe. Was bedeutet longer Argument was length of shorter?
zur Kontrolle siehe oben.
Ich habe leere Zellen in der Tabelle. Kann das damit zu tun haben? Anzahl der Zeilen und Spalten ist gleich.
für den obengenannten Fehler eher nicht. So wie ich das sehe, kommt es erst garnicht so weit.
Was genau macht die Funktion "[" ?
Es ist die Funktion mit denen Du Elemente indizierst/auswählst aus einem geeigneten Objekt.
Dokumentation:

Code: Alles auswählen

help("[")
Die Argumente in list() sind mir nicht klar. Wie kann ich ihm sagen, dass aus der Liste Tabelle x mit Spalte a und Tabelle Y mit Spalte b gemeint ist.
Oder funktioniert der ganze Term ganz anders?
So wie oben angegeben stellt Dir der Aufruf von mapply(...) folgende Sachen in eine Liste:
L[[1]][1:3] und L[[2]][4]
Dokumentation:

Code: Alles auswählen

help(mapply) ## oder
help("mapply") ## oder
?mapply
Zur Interpretation Deiner Frage müsste ich jetzt wissen, ob Du mit a die Zeichenkette "a" meinst oder ob a der Name eines Objektes ist, dass irgend einen bestimmten Wert enthält. Solange Du uns keine reproduzierbares Beispiel lieferst (siehe viewtopic.php?f=20&t=11 ), müssen unsere Antworten entsprechend vage/allgemein bleiben.

Bitte lies auch viewtopic.php?f=20&t=29 über das Formatieren von Code und verwende in zukünftigen Nachrichten die entsprechenden Formatierungen.

Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Tabelle zusammenstellen

Beitrag von EDi »

Ich würde aus den Spalten amenities eine neue variable erzeugen "P" , danach P aus den Namen entfernen und alles mit rbind zusammenfassen.

Ohne Beispiel kann ich leider nicht mehr sagen.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten