2016-12-29 18 views
0

は私が再現されますシフトつのセルを条件付きで

v1 <- c(40,45,46,45,46,43,45) 
v2 <- c(41,19,44,45,23,44,42) 
df <- data.frame(v1,v2) 

v1 v2 
40 41 
45 19 
46 44 
45 45 
46 23 
43 44 
45 42 

私の望ましい結果は、その後、私はこの順序で細胞を持っている必要があり

if v1 - v2 > 10 

です。

v1 v2 
40 41 
45 NA 
46 19 
45 44 
46 45 
43 NA 
45 23 
NA 44 
NA 42 

複雑すぎますか?

+0

あなたが列としてこれらを書いているので、私はあなたがこれらの変数がdata.frameであることを意味だと思います。しかし、列の長さは同じでなければなりません。 v1が最後にNAを持つことを意味しますか? – G5W

+0

はい、それはdata.frameであり、私はそれを編集しました。ありがとう。また、V1の最後にNAを追加しても問題ありません。 –

+0

'df $ v1 [5]'がNAであることを意味しますか? – G5W

答えて

0

私はこれまでより良いアプローチがあると考えているが、それは初心者のために良いことだ:)

v1 <- c(40,45,46,45,46,43,45) 
v2 <- c(41,19,44,45,23,44,42) 
df <- data.frame(v1,v2) 

update_df <- function(df){ 
    v1 <- df$v1 
    v2 <- df$v2 
    v1 <- c(v1,NA) 
    v2 <- c(v2[1:i-1],NA,v2[i:length(v2)]) 
    return(cbind.data.frame(v1,v2)) 
} 

k <- nrow(df) 
skip <- FALSE 

for(i in 1:k) 
{ 
    if(df$v1[i] - df$v2[i] > 10 & skip == F) 
    { df <- update_df(df) 
     k <- nrow(df) 
     skip <- TRUE 
     next} 
    skip <- FALSE 
} 
関連する問題