2017-09-13 19 views
0

です。私は2つの変数promo_freqとdisc_freqを持っています。これらの変数の両方の値に基づいて、私は3番目の変数promo_segmntを作成します。しかし、Rのネストされたifelseは動作していないと私の3番目の変数のために得ている唯一の値は "NA"です。私のデータによると、これは出力であってはなりません。 下記のコードを見つけてください。 ありがとうございます。ネストされたifelseはR

Promotion1$promo_segmnt <-ifelse(Promotion1$disc_freq == "1.Low_disc" & Promotion1$promo_freq == "1.Low_promo","1.Low", 
ifelse(Promotion1$disc_freq == "2.Med_disc" & Promotion1$promo_freq == "3.High_promo","3.High", 
ifelse(Promotion1$disc_freq == "3.High_disc" & Promotion1$promo_freq == "3.High_promo","3.High ","NA"))) 
+1

あなたはサンプル入力と期待される出力を提供することができますか? –

答えて

2

通常のシナリオが当てはまります。

disc_freq <- c("1.Low_disc", "2.Med_disc", "3.High_disc", "4.na") 
promo_freq <- c("1.Low_promo", "3.High_promo", "3.High_promo", "4.na") 
Promotion1 <- data.frame(disc_freq, promo_freq) 

Promotion1

disc_freq promo_freq 
<fctr>  <fctr> 
1.Low_disc 1.Low_promo   
2.Med_disc 3.High_promo    
3.High_disc 3.High_promo    
4.na 4.na 


Promotion1$promo_segmnt <- 
    ifelse(
    (Promotion1$disc_freq == "1.Low_disc") & 
    (Promotion1$promo_freq == "1.Low_promo"), 
    "1.Low", 
    ifelse(
    (Promotion1$disc_freq == "2.Med_disc") & 
    (Promotion1$promo_freq == "3.High_promo"), 
    "3.High", 
    ifelse(
    (Promotion1$disc_freq == "3.High_disc") & 
    (Promotion1$promo_freq == "3.High_promo"), 
    "3.High ", 
    "NA" 
) 
) 
) 

[1] "1.Low" "3.High" "3.High " "NA" 

あなたの列にいくつかの余分なスペースが可能です。 stringrパッケージを使用して削除できます。

library(stringr) 

Promotion1 $disc_freq<- str_trim(Promotion1 $disc_freq, side = "both") 
Promotion1 $promo_freq<- str_trim(Promotion1 $promo_freq, side = "both") 

次にifelseをもう一度お試しください。

+0

ありがとう、トンの男!出来た。余分なスペースに問題がありました。あなたが与えたロジックを使用してそれを削除しました。今私のプログラムはうまくいく:) –

1

あなたがif_elseを使用する代わりを探しているなら、あなたはこれを行うことができますdplyrパッケージからcase_whenを使用している:

suppressPackageStartupMessages(library(tidyverse)) 

disc_freq <- c("1.Low_disc", "2.Med_disc", "3.High_disc", "4.na") 
promo_freq <- c("1.Low_promo", "3.High_promo", "3.High_promo", "4.na") 
Promotion1 <- data.frame(disc_freq, promo_freq) 

mutate(Promotion1, promo_segmnt = case_when(
    disc_freq == "1.Low_disc" & promo_freq == "1.Low_promo" ~"1.Low", 
    disc_freq == "2.Med_disc" & promo_freq == "3.High_promo" ~"3.High", 
    disc_freq == "3.High_disc" & promo_freq == "3.High_promo" ~"3.High", 
    TRUE ~"NA")) 

#>  disc_freq promo_freq promo_segmnt 
#> 1 1.Low_disc 1.Low_promo  1.Low 
#> 2 2.Med_disc 3.High_promo  3.High 
#> 3 3.High_disc 3.High_promo  3.High 
#> 4  4.na   4.na   NA 
関連する問題