2016-08-09 13 views
1

Ich versuche, eine neue Variable aus meinen vorhandenen Variablen zu erstellen und dass es eine Bedingung erfüllt.Erstellen einer neuen Variablen aus vorhandenen Variablen mit einer Bedingung

startyear endyear ongoingasofyear imposition 
    (dbl) (dbl)   (dbl)  (dbl) 
1  1945 1947    NA   1 
2  1946 1949    NA   1 
3  1946 1993    NA   1 
4  1946 1960    NA   1 
5  1946 1946    NA   1 
6  1946  NA   1946   1 

Ich möchte eine Variable namens sanctions_period erstellen. Ich möchte, dass es von StartJahr - EndeJahre reicht, wenn diese verfügbar sind, und dann von StartJahr - fortlaufend, wenn das EndeJahr NA ist und das laufendeJahr nicht NA ist.

Dies ist, wie es aussehen sollte:

 startyear endyear ongoingasofyear imposition sanctions_period 
    (dbl) (dbl)   (dbl)  (dbl) 
1  1945 1947    NA   1  1945-1947 
2  1946 1949    NA   1  1946-1949 
3  1946 1993    NA   1  1946-1993 
4  1946 1960    NA   1  1946-1960 
5  1946 1946    NA   1  1946-1946 
6  1946  NA   1946   1  1946-ongoing 

Wie könnte ich gehe dies zu tun? Ich habe verschiedene Setups mit ifelse ausprobiert, war aber bisher nicht erfolgreich. Vielen Dank!

Antwort

0

Als wir die ‚tbl_df‘ verwenden, ist eine Option mit dem dplyr wäre, die Variable erstellen mit mutate von paste die Spalten zusammen ing und ein ifelse Zustand verwendet werden kann, für die NA-Elemente in ‚endYear‘ Rechnung zu tragen.

library(dplyr) 
df1 %>% 
    mutate(sanctions_period = ifelse(is.na(endyear) & !is.na(ongoingasofyear), 
     paste(startyear, "ongoing", sep="-"), paste(startyear, endyear, sep="-"))) 
#  startyear endyear ongoingasofyear imposition sanctions_period 
#1  1945 1947    NA   1  1945-1947 
#2  1946 1949    NA   1  1946-1949 
#3  1946 1993    NA   1  1946-1993 
#4  1946 1960    NA   1  1946-1960 
#5  1946 1946    NA   1  1946-1946 
#6  1946  NA   1946   1  1946-ongoing 
+1

Das hat bei mir funktioniert, danke! –

+0

Wie könnte ich hinzufügen, dass, wenn sowohl das Jahresende als auch das laufende Jahr NA sind, das dann entfernt wird? –

+0

@ jo.magi Dann könnten wir die Datenmenge zuerst unterteilen, bevor wir die Spalte erstellen. dh 'df1%>% filter (! (is.na (endyear) & is.na (laufendes Jahr))%>% muate (suctions_period = if_else (is.na (endyear) &! is.na (läuft als ein Jahr), einfügen (startyear, "fortlaufend", sep = "-"), einfügen (startyear, endyear, sep = "-"))) – akrun