変数

2017-12-22 6 views
0

私の現在のデータセットは、私は、変数「注文」と「V1」に基づいて「V2」と呼ばれる新しい変数を作成したいこの変数

Order  V1  
1   7  
2   5  
3   8  
4   5 
5   8 
6   3  
7   4 
8   2  
1   8  
2   6 
3   3 
4   4 
5   5 
6   7 
7   3 
8   6 

ようになり、既存のに基づいて新しい変数を作成します。 "Order"変数の8つの項目ごとに、変数 "Order"の観測値が1に等しい場合、 "V2"に "0"の値を代入したい。そうでない場合、「V2」は「V1」の前の項目の値をとる。 これは私の実際のデータセットは、私はif文「V2」を生成するためにforループを使用しようとしている、非常に大きいので、私は

Order V1 V2 
1  7  0 
2  5  7 
3  8  5 
4  5  8 
5  8  5 
6  3  8 
7  4  3 
8  2  4 
1  8  0 
2  6  8 
3  3  6 
4  4  3 
5  5  4 
6  7  5 
7  3  7 
8  6  3 

をしたいデータセットです。しかし、私のコードは失敗し続けます。誰かが私にこのことを助けることができればと感謝し、私は他の声明には開いている。ありがとうございました! (フロントアップ:私はOrderの順序が完全に制御されることを想定しています。)

答えて

1

をあなたは単にifelselagが必要です

df <- read.table(text="Order  V1  
1   7  
2   5  
3   8  
4   5 
5   8 
6   3  
7   4 
8   2  
1   8  
2   6 
3   3 
4   4 
5   5 
6   7 
7   3 
8   6 ", header=T) 

df$V2 <- ifelse(df$Order==1, 0, lag(df$V1)) 
df 
# Order V1 V2 
# 1  1 7 0 
# 2  2 5 7 
# 3  3 8 5 
# 4  4 5 8 
# 5  5 8 5 
# 6  6 3 8 
# 7  7 4 3 
# 8  8 2 4 
# 9  1 8 0 
# 10  2 6 8 
# 11  3 3 6 
# 12  4 4 3 
# 13  5 5 4 
# 14  6 7 5 
# 15  7 3 7 
# 16  8 6 3 
+0

または単純: 'ifelse(DFの$のご注文== 1,0、c(NA、df $ V1)) ' – PoGibas

1
with(dat,{V2<-c(0,head(V1,-1));V2[Order==1]<-0;dat$V2<-V2;dat}) 
    Order V1 V2 
1  1 7 0 
2  2 5 7 
3  3 8 5 
4  4 5 8 
5  5 8 5 
6  6 3 8 
7  7 4 3 
8  8 2 4 
9  1 8 0 
10  2 6 8 
11  3 3 6 
12  4 4 3 
13  5 5 4 
14  6 7 5 
15  7 3 7 
16  8 6 3