一つの解決策:
私はそれが最も簡単なだけので同じように、直接ベクターを用いて動作するように見つけるだろう:あなたのコードで
df$a <- df$a + c((df$b[-1] == 2) * 3, 0)
問題:
最初の引数の各要素であるdf$b==2
は、df$a
の次の行と一致します。さんは説明する、あなたの質問に例を見てみましょう。ここでは
df <- data.frame(a=c(0,1,2,2,4), b=c(1,3,2,4,5)) # As in your question
、df$b==2
がc(FALSE, FALSE, TRUE, FALSE, FALSE)
と同等です。
df$a[-1]
は、全てdf$a
の要素です(ただし、最初はc(1,2,2,4)
と等価です)。引数の長さが異なるため、c(1,2,2,4,1)
のように、df$a[-1]
の最初の要素が繰り返し/ループされます。
したがって、あなたの文で、df$b==2
の最初の要素はdf$a[-1]
の最初の要素、または(後続の行IE)df$a
の第二の要素に整合され、及びdf$b==2
の第2の要素は、の3番目の要素に一致しますあなたのコードを調整する方法を
ifelse(df$b==2, df$a[-1]+3, df$a[-1])
# Output: 1 2 5 4 1
:df$a
などこの例では
は、あなたのコードは次の出力を与えるだろう
あなたがそうでdf$a
の最初とにdf$b
の第二の要素を比較したいので、次のように、あなたのコードを調整することができます:
df$a[-nrow(df)] <- ifelse(df$b[-1]==2, df$a+3, df$a)
私の説明のいずれかが不明である場合は、コメントすること自由に感じ、私は助けようとします!
また、あなたはSO上でコードの空白のために余分に払っていない、それは、メンバーシップの計画に含まれています。 – hrbrmstr