2017-02-07 10 views
1

Ich möchte in der Lage sein, die basierend auf dem Beispiel-Datensatz in R unter folgenden zu tun (die tatsächliche Datenmenge ist viel länger mit noch vielen Jahren für Adressen):Extrahieren von Daten aus Variable basierend auf Spaltenüberschrift in R

|ID|birthyr |address1990|address1991|address1992|address1993| 
|A |1992  |NA   |NA   |2   |2   | 
|B |1990  |2   |2   |3   |3   | 
|C |1991  |NA   |3   |3   |1   | 

Ich möchte eine neue Spalte mit dem Adresswert für das Jahr machen, in dem sie geboren wurden. Also idealerweise würde ich das Jahr in birthyr für jede Person nehmen und schauen, welche Spaltenüberschrift diese Zeichenfolge enthält und dann den Wert in verwenden diese Spalte für diese Person. Ich habe eine Möglichkeit, dies zu tun, siehe unten Code, aber es ist nicht die beste Methode, da es den Wert aus der ersten Spalte von Adressen, in denen Daten vorhanden ist, nimmt, und ich bin besorgt, dass dies zu fehlenden Daten führen kann .

Wenn ich den obigen Code auf dem Beispiel ausführen, erhalte ich die folgenden Ergebnisse. Obwohl mir das zur Verfügung steht, was ich will, stelle ich mir vor, dass es Umstände gibt, unter denen es nicht funktionieren würde. Daher wollte ich eine prägnantere und robustere Art und Weise, dies zu tun.

ID birthyr address1990 address1991 address1992 address1993 birth_address address_first_year 
1 A 1992   NA   NA   2   2    2    1992 
2 B 1990   2   2   3   3    2    1990 
3 C 1991   NA   3   3   1    3    1991 

EDIT: - aktualisiert pro Kommentar unten Dies sind die Ergebnisse, die ich unten mit dem Code zu bekommen, aber es scheint nicht zu sein, was ich erwarten würde.

ID birthyr address1990 address1991 address1992 address1993 birth_address 
1 A 1992   NA   NA   2   2    2 
2 B 1990   2   2   3   3    3 
3 C 1991   NA   3   3   1    2 

Danke

+0

Es wäre hilfreich, um das Ergebnis von 'dput zu schreiben (dat)' – GGamba

+0

Danke für die Antwort Ich glaube, ich habe hinzugefügt, was Sie angefordert haben, lassen Sie mich wissen, wenn das nicht der Fall ist – user5481267

Antwort

2

Da dat Ihre Daten und mit dplyr und tidyr:

library(dplyr) 
library(tidyr) 
dat %>% 
    gather(addressYY, value, 3:6) %>% 
    mutate(BirthAdderess = gsub(x = addressYY, 'address', '')) %>% 
    filter(birthyr == BirthAdderess) 
+0

Vielen Dank für Ihre Antwort, ich bin ziemlich neu in R und ich bin mir nicht ganz sicher, was das obige tut. Können Sie uns bitte kurz eine Erklärung geben? – user5481267

+0

Sicher. Mit der Funktion 'gather' transformieren wir die addressYear-Spalten in Zeilen mit dem Adresswert, mit' mutate' und 'gsub' transformieren wir den gesamten Text wie' address1990' in Zahlen und filtern dann nur die Zeilen mit dem Geburtsjahr wie die adresseYear. Sie können es Zeile für Zeile ausführen, um zu erhalten, was es tut. – GGamba

+0

Danke, das macht Sinn. Im Idealfall möchte ich jedoch die originale AdresseYY Spalten behalten, wie ich sie später brauchen werde. Gibt es eine Möglichkeit, dies zu tun? – user5481267

Verwandte Themen