2017-07-14 6 views
0

列が存在するかどうかを調べ、その列が存在する場合は計算を実行し、そうでない場合は、元の変数。ここでR:ifelse文を使用して列が存在するかどうかをチェックし、計算を実行する

は、いくつかのデータと私は考えていたアプローチである。

thisdata <- data.frame(vara = seq(from = 1, to = 20, by = 2) 
        ,varb = seq(from = 1, to = 20, by = 1)) 

thisdata$varc <- with(thisdata, ifelse("vard" %in% colnames(thisdata), vara - vard, vara)) 

だから、明らかに「vard」のデータフレームではないが、しかし、私は私の新しい変数のためのオリジナルの「VARA」変数バックを得ることはありません(1のみ')。もちろん、私は 'vard'変数を持つ別のデータフレームを持つかもしれません。

ヘルプを評価してください!

答えて

4

この場合、ifのベクトル化された形式は必要ありません。お試しください

thisdata$varc <- with(thisdata, if ("vard" %in% colnames(thisdata)) vara - vard else vara) 
1

ifelseを使用する理由はありますか?私はifを使うのが好きです。何か複雑なことをしようとすると、それは私の好みです。

thisdata$varc <- if("vard" %in% names(thisdata)) { 
    thisdata$vara - thisdata$vard 
} else { 
    thisdata$vara 
} 
2

これを試してみてください。

thisdata$varc <- with(thisdata,ifelse(rep("vara" %in% colnames(thisdata),dim(thisdata)[1]), vara - varb, vara)) 

私は、このリンクも役立つと思う:https://www.programiz.com/r-programming/ifelse-function

ifelse:戻り値は同じ長さtest_expressionとしてを持つベクトルである(length("vara" %in% colnames(thisdata)) = 1、あなたはすべて1を得た。この理由(。最初の値はvara)元のものが試みられました)

関連する問題