Seite 1 von 1

Variablen zusammenführen

Verfasst: Mo Sep 10, 2018 10:08 am
von max-r
Hallo ihr Lieben,

ich habe im Moment mit der Aufbereitung meiner Daten zwei Probleme. Ich habe von Patienten Vollblutproben abgenommen und dieses nun analysiert. Bei manchen Patienten hat das Serum aus der ersten Probe nicht ausgereicht, sodass ich die zweite Probe verwenden musste. Das Programm das ich verwendet habe spuckt mir dann 2 Variablen zur gleichen Versuchsperson innerhalb eines Datensatzes aus, ungefähr so: VPN0001 und VPN0002second_run. Ich würde gerne, dass alle Daten innerhalb von VPN0001 auftauchen. Das matchen gestaltet sich aber schwer, da die Variablen unterschiedlich heißen und nicht in zwei Datensätzen sind und gleich sind. Würde es eventuell Sinn machen, den Mittelwert beider Variablen zu berechnen, da ich jeweils auf der anderen Variable sowieso Missings habe?

Das zweite Problem ist, dass ich psychologische Daten der Versuchspersonen habe, in denen der Versuchscode (leider) anders benannt wurde, da ich die nicht selbst erhoben habe. Das heißt ich habe einen Datensatz mit Serumwerten, wo die Versuchspersonen z.B. als Code XY0001 haben und einen Datensatz in dem die Versuchpersonen YZ0001 heißen, wobei die Nummerendungen sich jeweils entsprechen. Jetzt bin ich auf der Suche nach einer intelligenten Lösung die Datensätze anhand der Variable "Code" zusammenzufassen, ohne, dass ich jeden Fall händisch umbenennen muss. Gibts da von euch Vorschläge?

Liebe Grüße aus der Datenaufbereitungs-Hölle

Max

Re: Variablen zusammenführen

Verfasst: Mo Sep 10, 2018 10:12 am
von jogo
Hallo Max,

willkommen im Forum!
Kannst Du uns bitte zeigen mit welchen Code Du die Daten eingelesen hast?
Auch die Outputs von

Code: Alles auswählen

str(Dataframe)
für die beteiligten Dataframes ist eine wertvolle Information für uns, um Dir helfen zu können.

Ich vermute, es wird vielleicht etwas wie merge() werden.

Gruß, Jörg

Re: Variablen zusammenführen

Verfasst: Mo Sep 10, 2018 12:36 pm
von max-r
Hallo Jogo,

Die Serums-Daten habe ich mittels read.delim und die psychdaten mittels read.csv eingelesen.

Ich hab dir mal für das zweite Problem nur die "code" Variablen angegeben, weil die Datensätze riesig sind.

Code: Alles auswählen

str(dataframe1$code)
 Factor w/ 112 levels "TG0001S..Log2.normalized.",..: 

Code: Alles auswählen

str(dataframe2$code)
 Factor w/ 555 levels "B0001","B0002",..: 
Kannst du damit was anfangen? ;)

Re: Variablen zusammenführen

Verfasst: Mo Sep 10, 2018 1:11 pm
von jogo
Hallo Max,
max-r hat geschrieben: Mo Sep 10, 2018 12:36 pm Die Serums-Daten habe ich mittels read.delim und die psychdaten mittels read.csv eingelesen.

Ich hab dir mal für das zweite Problem nur die "code" Variablen angegeben, weil die Datensätze riesig sind.

Code: Alles auswählen

str(dataframe1$code)
 Factor w/ 112 levels "TG0001S..Log2.normalized.",..: 

Code: Alles auswählen

str(dataframe2$code)
 Factor w/ 555 levels "B0001","B0002",..: 
Kannst du damit was anfangen? ;)
Du kannst die vier Ziffern mit Hilfe eines regulären Ausdrucks identifizieren, z.B.:

Code: Alles auswählen

x <- "TG0001S..Log2.normalized."
gsub(".*(\\d\\d\\d\\d).*", "\\1", x)
also in Deinem Fall:

Code: Alles auswählen

gsub(".*(\\d\\d\\d\\d).*", "\\1", dataframe1$code)
gsub(".*(\\d\\d\\d\\d).*", "\\1", dataframe2$code)
Besonders für den zweiten Dataframe sind auch andere Varianten möglich, z.B.

Code: Alles auswählen

gsub("^.", "", ...)
(Von der Datenaufbereitungs-Hölle ins regex-Paradies) :o
Nachtrag: gelegentlich sind die regex eine Hölle für sich.

Es geht auch ohne regex, z.B. mit der Funktion substr(), z.B.

Code: Alles auswählen

x <- "TG0001S..Log2.normalized."
substr(x, 3, 6)
Wenn man dann den Zifferncode in beiden Dataframes rausgelöst hat, dann man mit diese Variable bei merge() verwenden.

Code: Alles auswählen

dataframe1$VPerson <- gsub(".*(\\d\\d\\d\\d).*", "\\1", dataframe1$code)
dataframe2$VPerson <- gsub(".*(\\d\\d\\d\\d).*", "\\1", dataframe2$code)
merge(dataframe1, dataframe2, by="VPerson")
Gruß, Jörg

Re: Variablen zusammenführen

Verfasst: Fr Sep 21, 2018 10:37 am
von max-r
Danke - es hat übrigens bestens funktioniert. Hab ich gar nicht mehr geschrieben!

Jetzt habe ich noch ein kleines Problem, dann könnte die Datenanalyse eigentlich beginnen:

Bei der Serumanalyse haben unsere Maschinen nicht immer optimal gearbeitet, weswegen wir einen zweiten oder dritten run machen mussten. Dabei passiert folgendes. Bis zum ersten Abbruch habe ich Daten für die Versuchsperson TG332S..Log2.normalized., für alles danach habe ich Daten für eine Versuchsperson namens TG332S_2nd.run..Log2.normalized. Es gibt jeweils Missings dort wo im anderen run nichts identifiziert wurde. Das heißt es gibt keine Datenüberschneidungen, sondern Missings dort wo im anderen run nichts identifziert wurde. Die Frage ist jetzt wie ich diese beiden Versuchspersonen zu einer zusammen legen kann. Es gibt zwei Möglichkeiten. Entweder ich mache es noch während die Versuchspersonen als Spalten, also Variablen da stehen, oder danach, wenn ich die Spalten und Zeilen vertauscht habe und eine neue Variable namens "code" habe. Irgendwelche sinnvollen Vorschläge?

Lieben Gruß Max

Re: Variablen zusammenführen

Verfasst: Fr Sep 21, 2018 12:03 pm
von ruedi_br
Nochmal zur Klarstellung: entweder sind in der Variablen "...log2normalized" oder in der Variablen "...2nd.run..log2normalized" Daten?
Spricht dann was dagegen, die N/As durch 0 zu ersetzen und dann beide runs zu addieren?
Grüße
Ruedi

Re: Variablen zusammenführen

Verfasst: Fr Sep 21, 2018 1:14 pm
von max-r
Stimmt - eigentlich liegen die einfachen Lösungen sehr Nahe .. :D Theoretisch könnte ich aber auch einfach den Mittelwert aus beiden Variablen bilden, bevor ich den N/As durch 0 ersetze. Bei N/As dürfte ja einfach nur der eine Wert gezählt werden, oder?

Re: Variablen zusammenführen

Verfasst: Fr Sep 21, 2018 1:16 pm
von jogo

Code: Alles auswählen

mean(c(1, NA, 3), na.rm=TRUE) ### bringt Klarheit