2017-06-02 10 views
0

レプリケートされた値の文字列を作成する必要があります。レプリケート数は特定の条件を満たすことに依存します。 例:これは単純化されており、実際のタスクと条件はより複雑です。異なるレプリケーション頻度の文字列をrに作成する

4回複製される4の整数を除いて、1:5の範囲内で3回の値を複製します。

次のように出力が見えるべきである:1 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5

を私は範囲内の各値を検査するループを作成した:

場所です私が得た:

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) 

しかし、私を与えている: [1] 5 5 5

それはそれはoututを上書きしています見えます。

次のように私も事前定義タスクを試してみました

:私を与えている

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) 

: [1] 5 5 5 5 5 5 5

しかし、それは条件を認識しないと同じ値の両方のオプションを受け入れ、出力を上書きしているようです。

私はこれが非常に簡単だと確信していますが、私はプログラミングに慣れていて、それでもまだ苦労しています。私は誰かが私にこれを手伝ってもらえると感謝しています。

ありがとうございます! (コメントの提案を次補正後の)

UPDATE:

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) 
} 

それは動作します!ありがとう!

+0

ありがとうございました!これは実際の値ではないので、私はできません。私は365のエントリを持つうるう年の条件を満たすものを除いて、毎年私に365のエントリを与えるコードを生成しようとしています。期間は2500〜4000年をカバーするので、範囲は1:2050などになる可能性があります。 – EBB

答えて

1

for() {}の後に賞賛を逃していると思います。 さらに、is.integerの代わりにモジュラスをチェックして、値ではなく変数の型をチェックすることができます。

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

あなたは数秒で私を打ち負かしました。私はOPで書かれたコードをテストし、forループの{}が欠けていることが問題です。 –

+0

偉大な、ありがとう!私はすぐにこれを試してみるつもりです。 – EBB

+0

私は不足している{}を追加し、条件を設定するためのモジュールを使用しました。ありがとう!!!主な質問のコードを更新しました:D – EBB

関連する問題