私は R の初心者です。マニュアルやこの掲示板で多くのことを読みましたが、最初の質問をしなければなりません。ここと少し同じですが、実際には同じではなく、説明がわかりません。
数十万行と 30 列のデータフレームがあります。しかし、私の質問のために、使用できるより単純なデータフレームを作成しました:
a <- sample(c(1,3,5,9), 20, replace = TRUE)
b <- sample(c(1,NA), 20, replace = TRUE)
df <- data.frame(a,b)
ここで、最後の列 (ここでは column b
) の値を比較して、次の行と同じ場合に各行の値を繰り返し調べたいと考えています。それが同じであれば、同じ行の新しい列の値として a を書きたいです0
。そうでなければ1
、新しい列の値として a にする必要があります。
ここで私のコードを見ることができますが、新しい列の行には次のものしか含まれていないため、機能していません0
。
m<-c()
for (i in seq(along=df[,1])){
ifelse(df$b[i] == df$b[i+1],m <- 0, m <- 1)
df$mov <- m
}
私が取得したい結果は、以下の例のようになります。間違いは何ですか?ループを作成するよりも良い方法はありますか? 私の大きなデータセットでは、ループが非常に遅くなる可能性があります。
a b mov
1 9 NA 0
2 1 NA 1
3 1 1 1
4 5 NA 0
5 1 NA 0
6 3 NA 0
7 3 NA 1
8 5 1 0
9 1 1 0
10 3 1 0
11 1 1 0
12 9 1 0
13 1 1 1
14 5 NA 0
15 9 NA 0
16 9 NA 0
17 9 NA 0
18 5 NA 0
19 3 NA 0
20 1 NA 0
ご協力ありがとうございました!