【问题标题】:R Combine various logical operators within Boolean or if statementsR在布尔或if语句中组合各种逻辑运算符
【发布时间】:2019-09-02 08:44:20
【问题描述】:

我有一个列出 400 个产品的数据框。这些产品中的每一个都属于某个类别:身体清洁、头发、DEO、手部身体、面部、男士、唇部、太阳和女性剃须。此外,我还有销售月,其中 400 种产品中的每一种都发布了。

如果产品在旺季推出,我想在我的数据框中创建一个新列显示TRUE,否则显示FALSE

逻辑是这样的: 如果在 10 月或 11 月或 12 月的旺季月份推出了身体清洁或头发或 DEO 或手部身体或面部或男士或唇部类别中的产品 = TRUE 并且如果太阳或女性剃须类别中的产品是在 4 月、5 月、6 月或 7 月的旺季推出 = TRUE

我尝试了以下方法:

Sample_15$high_season <- (Sample_15$Category == "BODY CLEANSING" | "HAIR" 
| "DEO" | "HAND BODY"| "FACE" | "MEN" | "LIP" & Sample_15$Months_extract 
== "Oktober" | "November" | "Dezember") | (Sample_15$Category == "SUN" | 
"FEMALE SHAVE" & Sample_15$Months_extract == "April" |                                              
"Mai" | "Juni" | "Juli")

我收到此错误消息:

Error in Sample_15$Category == "BODY CLEANSING" | "HAIR" : 
  operations are possible only for numeric, logical or complex types

有人知道如何编写布尔逻辑吗?任何帮助表示赞赏!!!!

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    Sample_15$Category == "BODY CLEANSING" | Sample_15$Category == "HAIR" ...等等

    Sample_15$Category %in% c("BODY CLEANSING","HAIR",...)
    

    【讨论】:

    • 感谢您的快速答复@user2974951。我试图纠正这一点。然而,布尔值搞砸了。例如。 FACE 类别和 Month January 是 TRUE,这没有任何意义。我是否也将逻辑运算符的语法弄乱了?
    【解决方案2】:

    您的错误是您没有将所有条件的矢量字体再次写为 user2974951 向您展示了。在您的情况下,更容易检查元素是否在向量内。

    就解决方案而言,解决此问题的一种简单方法是使用dplyrcase_when

    Sample15 %>% 
    mutate(high_season = case_when(
        Category %in% c("BODY CLEANSING","HAIR", "DEO","HAND BODY","FACE","MEN","LIP") 
        & Months_extract %in% c("Oktober","November" ,"Dezember") ~ TRUE, 
    
        Category %in% c("SUN" ,"FEMALE SHAVE") 
        & Months_extract %in% c("April","Mai","Juni", "Juli") ~ TRUE)) %>% 
    
    mutate(high_season = ifelse(highseason == TRUE, TRUE, FALSE)) #add FALSE to rest
    

    带底R(不整齐)

    hsm <- which(Sample15$Category %in% c("BODY CLEANSING","HAIR", "DEO","HAND BODY","FACE","MEN","LIP") 
            & Sample15$Months_extract %in% c("Oktober","November" ,"Dezember")) 
    
    Sample15[hsm,high_season] <- TRUE 
    
    hsf <- which(Sample15$Category %in% c("SUN" ,"FEMALE SHAVE") 
            & Sample15$Months_extract %in% c("April","Mai","Juni", "Juli"))
    
    Sample15[hsf,high_season] <- TRUE 
    
    Sample15$highseason <- ifelse(Sample15$high_season == TRUE, TRUE, FALSE) 
    

    【讨论】:

    • 感谢您的回答!我在加载 dplyr 包时遇到问题。我暂时依靠基地。我想我把代码中的括号弄乱了。我将再次发布问题,但以不同的方式提出。
    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2020-01-05
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多