【问题标题】:ifelse doesn't work when applying filter on r在 r 上应用过滤器时 ifelse 不起作用
【发布时间】:2021-11-22 12:50:51
【问题描述】:

很好,我正在尝试在 R 中制作过滤器,但结果与预期不符

x1 = c("PIB","PIB","PIB","PIB","PIB")
x2 = c("IBR","IBR","IBR","IBR","IBR")
coef_x1 = c(0.001,0.004,0.002,-0.099,-0.88)
coef_x2 = c(0.12,0.15,-0.99,-0.77,0.45)
Signo_x1 = c("+","+","+","+","+") 
Signo_x2 = c("+","+","+","+","+")

Table = data.frame(x1,x2,coef_x1,coef_x2,Signo_x1,Signo_x2)

这是我的桌子

   x1  x2 coef_x1 coef_x2 Signo_x1 Signo_x2
1 PIB IBR   0.001    0.12        +        +
2 PIB IBR   0.004    0.15        +        +
3 PIB IBR   0.002   -0.99        +        +
4 PIB IBR  -0.099   -0.77        +        +
5 PIB IBR  -0.880    0.45        +        +

我需要按如下方式进行过滤

x1  x2 coef_x1 coef_x2 Signo_x1 Signo_x2
1 PIB IBR   0.001    0.12        +        +
2 PIB IBR   0.004    0.15        +        +
3 PIB IBR   0.002   -0.99        +        +

对于过滤器,我正在执行以下代码:

在此更新

 Table = ifelse(Table$Signo_x1 == "+",Table %>% dplyr::filter(Table$coef_x1 >= 0),Table %>% dplyr::filter(Table$coef_x1 <= 0))

[[1]]
[1] "PIB" "PIB" "PIB"

[[2]]
[1] "IBR" "IBR" "IBR"

[[3]]
[1] 0.001 0.004 0.002

[[4]]
[1]  0.12  0.15 -0.99

[[5]]
[1] "+" "+" "+"

任何人都知道如何将其转换回数据帧,或者如果我使用的代码不正确,我该如何解决?

【问题讨论】:

    标签: r dataframe if-statement


    【解决方案1】:

    我们需要使用&amp;来创建表达式

    library(dplyr)
    Table %>%
        filter(Signo_x1 == "+" & coef_x1 >= 0)
    

    -输出

        x1  x2 coef_x1 coef_x2 Signo_x1 Signo_x2
    1 PIB IBR   0.001    0.12        +        +
    2 PIB IBR   0.004    0.15        +        +
    3 PIB IBR   0.002   -0.99        +        +
    

    根据 cmets,我们可能需要if/else

    Table %>%
        filter(if(any(Signo_x1 == "+" & coef_x1 >= 0)) 
           Signo_x1 == "+" & coef_x1 >= 0 else coef_x1 <=0)
      x1  x2 coef_x1 coef_x2 Signo_x1 Signo_x2
    1 PIB IBR   0.001    0.12        +        +
    2 PIB IBR   0.004    0.15        +        +
    3 PIB IBR   0.002   -0.99        +        +
    

    或者从base R使用subset

    subset(Table, Signo_x1 == "+" & coef_x1 >= 0)
    

    【讨论】:

    • 如果不是,则满足Sign_x1 == "+" 且是Sign_x1 == "-",如何使之成为另一个条件?
    • 对我的问题进行更新,在相反的情况下,因为如果它不满足条件我需要执行另一个
    • @redondo 您是在寻找解决方案还是仅使用ifelse(不适用于这些情况)
    • @redondo 从您的代码中,我有一个问题。您是在寻找OR 条件还是完全不满足,执行第二个表达式?
    • 如果不完全满足就更正,做第二个表达式
    猜你喜欢
    • 2016-06-28
    • 2018-04-28
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多