2016-10-14 12 views
2

の最初の値に対する相対値を空ベクターを充填これを作っ私はベクトルを有するベクトル

second.vector <- c(1, rep(NA, length(sample.vector))) 

sample.vector 
     1 
     1 
     0 
     0 
     14 
     1 
     1 
     0 
     1 
     12 

Iは、以下のコードを有する第二のベクトルを作成しました。

second.vector 
     1 
     NA 
     NA 
     NA 
     NA 
     NA 
     NA 
     NA 
     NA 
     NA 
     NA 

私はNA sが0 + Tで置き換えられていることをsecond.vectorな移入したいです彼はそれの上の行(すなわち、第2のベクトルの第1の行の1)sample.vector < 3またはそれより上の行の値(つまりその値が何であれ)sample.vector > 3の場合は1です。言い換えれば

R、私はあなたがsample.vectorで[n]の行を見てみたいです。値が3未満の場合は、second.vectorのNAをそのNAを上回る値に置き換えてください。行[n]の値が3より大きい場合は、NAをsecond.vectorにそのNAの値で塗りつぶしますが、1を加算します。

sample.vector内のすべての行でこれを実行し、second.vectorの各NAを値に置き換えます。

だから私は得ることを望んだのベクトルは、次のとおりです、

second.vector[2:length(second.vector)] <- 
    ifelse(sample.vector[1:length(sample.vector)] > 3, 
    second.vector[1:length(second.vector)]+1, 
    second.vector[1:length(second.vector)]+0) 

しかし、それだけでsecond.vector 1の第2の列を与える:

second.vector 
     1 
     1 
     1 
     1 
     1 
     2 
     2 
     2 
     2 
     2 
     3 

私はこれを試してみましたベクター全体をいっぱいにするのではなく、

これを行う方法についてのご意見はありますか?

+5

'CUMSUM(as.numeric(sample.vector> 3))+ 1 ' – cuttlefish44

+0

であるものであれば値= 3? – bouncyball

+0

@bouncyballこれは単なる例です。私が持っているデータは、値が1,0、または実際には本当に美しく働いた2または3よりもはるかに大きい値です( –

答えて

2

cumsum()は累積合計を返します。例えば、cumsum(c(3, 7, 1))[1] 3 10 11

sample.vector <- c(1,1,0,0,14,1,1,0,1,12) 
library(dplyr) # just to explain 

(sample.vector > 3) %>% # [1] FALSE FALSE FALSE FALSE TRUE ... 
    as.numeric() %>%  # [1] 0 0 0 0 1 ... # but this line is unnecessary, thanks @Pierre Lafortune 
    cumsum() %>%  # [1] 0 0 0 0 1 1 1 1 1 2 # do cumulative sums 
     + 1    # [1] 1 1 1 1 2 2 2 2 2 3 # what you want 

# summarizing the above, 
cumsum(sample.vector > 3) + 1 
関連する問題