2017-09-13 195 views
0

我有2个变量promo_freq和disc_freq。根据这两个变量的值,我想创建第三个变量promo_segmnt。然而,R中嵌套的ifelse并没有发挥作用,我得到的第三个变量的唯一值是“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,那么你可以做到这一点是使用case_whendplyr包:

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