2017-03-02 24 views
1

次のように私は、データセットを持っている:組み込みIfelse声明

私はコラム場所を追加するにはどうすればよい
Source  Rev_Diff Cost_Diff  Price_Diff  Sales_Diff  
    A   -10   10    11    12 
    B   11   -10   -10    11 
    C   -12   10    10    -11 
    D   -11   -11   -10    -12 

「Rev_Diffが0未満の場合、 印刷 『コストとCost_Diff『』場合を』量を持つ「Price_Diffが」0未満の場合量と「Sales_Diffが」0未満であれば量は他の は「私たちはアップしている」印刷、 印刷「販売」が0未満、 印刷「価格」である。

最終出力:

Source  Rev_Diff Cost_Diff  Price_Diff  Sales_Diff  Reason Down  
    A   -10   -10    11    12  Cost (-10) 
    B   11   -10   -10    11  We're Up 
    C   -12   10    10    -11  Sales (-11) 
    D   -11   -11   -10    -12  Cost (-11), Price (-11), Sales (-12) 
+0

たぶん – Frank

答えて

1

if文をどのように構造化したいのですか?次の例では、前の列の情報に基づいて新しい列を追加できます。

Source <- c("A", "B", "C", "D", "E") 
Rev_Diff <- c(-10, 11, 12, 11, 10) 
Cost_Diff <- c(10, -10, 10, -11, 11) 
Price_Diff <- c(-11, 10, -10, 10, 10) 
Sales_Diff <- c(12, 11, 11, -12, 11) 

df <- data.frame(Source, Rev_Diff, Cost_Diff, Price_Diff, Sales_Diff) 

df %>% 
    mutate(ReasonDown = ifelse(Rev_Diff < 0, paste("Rev", Rev_Diff), 
         ifelse(Cost_Diff < 0, paste("Cost", Cost_Diff), 
         ifelse(Price_Diff < 0, paste("Price", Price_Diff), 
         ifelse(Sales_Diff < 0, paste("Sales", Sales_Diff), "We're up"))))) 

    Source Rev_Diff Cost_Diff Price_Diff Sales_Diff ReasonDown 
1  A  -10  10  -11   12 Rev -10 
2  B  11  -10   10   11 Cost -10 
3  C  12  10  -10   11 Price -10 
4  D  11  -11   10  -12 Cost -11 
5  E  10  11   10   11 We're up 

しかし、私が思うに、それはTRUE文を見つけたら、ifelseは停止しますので、あなたがソースD.に持っていたようにあなたが本当にすべてを印刷したい場合、これは、複数の「ダウンの理由を」プリントアウトすることができませんRev、Cost、Price、Salesのそれぞれをチェックする4つの新しい列を追加し、すべてを要約するために5番目の列を追加することができるはずです。

df %>% 
    mutate(RRev = ifelse(Rev_Diff < 0, paste("Rev", Rev_Diff), "")) %>% 
    mutate(RCost = ifelse(Cost_Diff < 0, paste("Cost", Cost_Diff), "")) %>% 
    mutate(RPrice = ifelse(Price_Diff < 0, paste("Price", Rev_Diff), "")) %>% 
    mutate(RSales = ifelse(Sales_Diff < 0, paste("Sales", Rev_Diff), "")) %>% 
    mutate(DownReason = ifelse(nchar(paste(RRev, RCost, RPrice, RSales)) > 3, paste(RRev, RCost, RPrice, RSales), "We're UP")) 

    Source Rev_Diff Cost_Diff Price_Diff Sales_Diff RRev RCost RPrice RSales   DownReason 
1  A  -10  10  -11   12 Rev -10   Price -10   Rev -10 Price -10 
2  B  11  -10   10   11   Cost -10        Cost -10 
3  C  12  10  -10   11     Price 12     Price 12 
4  D  11  -11   10  -12   Cost -11   Sales 11 Cost -11 Sales 11 
5  E  10  11   10   11            We're UP 
+0

おかげ@JPHwang max.col'と次回(のような、など、「コスト」に「REV」のポイントを持っていない)あまり複雑な例を行うことを検討 '使用し、どのように"追加します最後のバージョンの「We're Up」のセクション? –

+0

複数の列を追加するのに 'mutate'を使うことができます。 – Gregor

+0

@NickKnauerが最後のステートメントを変更して文字数を数えました。すべてが0の場合、ペーストは3つのブランクを生成しますので、それ以上のものは通常どおり印刷され、3つのブランクは "We're up"を生成します。 – JPHwang

関連する問題