2017-06-02 4 views
0

Ich muss eine Zeichenfolge repliziert Werte erstellen, die Anzahl der Replikate hängt davon ab, bestimmte Bedingungen zu erfüllen. Zum Beispiel (dies ist eine Vereinfachung; die eigentliche Aufgabe und die Bedingungen sind komplizierter):Erstellen Sie eine Zeichenfolge von replizierten Werten mit unterschiedlicher Replikationshäufigkeit in r

Replizieren Sie drei Mal Werte im Bereich 1: 5, mit Ausnahme derjenigen, die ganze Zahlen von 4 sind, die vier Mal repliziert werden.

sollte die Ausgabe wie folgt aussehen: 1 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5

I eine Schleife erstellt, jeden Wert innerhalb des Bereichs zu prüfen:

Hier ich habe:

year<-(1:5) 
r2<-NULL 
for (x in 1:length(year)) 
    if(is.integer(4)){ 
    r<-rep(year[x],4) 
    }else{ 
    r<-rep(year[x],3) 
    } 
r2<-c(r2,r) 

Aber mir gibt: [1] 5 5 5

es sieht er die outut ist überschrieben werden.

Ich habe auch vor definierende Aufgaben versucht wie folgt:

year<-(1:5) 
r<-rep(year[x],4) 
r2<-rep(year[x],3) 
for (x in 1:length(year)) 
    ifelse(is.integer(4),r,r2) 
r3<-c(r2,r) 

Was mich geben wird: [1] 5 5 5 5 5 5 5

Aber es erkennt nicht den Zustand und scheint beide Optionen für den gleichen Wert zu akzeptieren und die Ausgabe zu überschreiben.

Ich bin mir sicher, dass das sehr einfach ist, aber ich bin neu im Programmieren und kämpfe immer noch damit. Ich würde mich freuen, wenn mir jemand dabei helfen könnte.

Danke !!

UPDATE (folgende Vorschläge zu den Kommentaren korrigiert):

year<-(1:5) 
r2<-NULL 
for (x in 1:length(year)){ 
    if(year[x]%%4==0){ 
    r<-rep(year[x],4) 
    }else{ 
    r<-rep(year[x],3) 
    } 
    r2<-c(r2,r) 
} 

Es funktioniert !! Vielen Dank!

+0

Vielen Dank für Ihre schnelle Antwort! Ich kann nicht, weil dies nicht die tatsächlichen Werte sind. Ich versuche, einen Code zu generieren, der mir 365 Einträge pro Jahr gibt, mit Ausnahme von denen, die die Bedingungen von Schaltjahren erfüllen, die 366 Einträge haben werden. Die Zeiträume können 2500 bis 4000 Jahre umfassen, so dass der Bereich beispielsweise 1: 2050 betragen kann. – EBB

Antwort

1

Ich denke, Sie fehlen die Auszeichnungen nach for() {}. Und zusätzlich möchten Sie möglicherweise den Modul anstelle von is.integer überprüfen, die den Variablentyp nicht den Wert überprüfen wird.

year<-(1:5) 
r2<-NULL 
for (x in 1:length(year)){ 
    if(year[x] %% 4==0){ 
    r<-rep(year[x],4) 
    }else{ 
    r<-rep(year[x],3) 
    } 
r2<-c(r2,r) 
} 

r2 
[1] 1 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 
+1

Du schlägst mich durch Sekunden, @Bea! Ich habe den Code wie im OP beschrieben getestet und das fehlende {} in der for-Schleife ist das Problem. –

+0

Großartig, danke! Ich werde es gleich ausprobieren. – EBB

+0

Ich habe die fehlenden {} hinzugefügt und Module zum Einstellen der Bedingungen wie vorgeschlagen verwendet und es hat funktioniert! Vielen Dank!!!. Aktualisierter Code in der Hauptfrage: D – EBB

Verwandte Themen