Python的np.select(条件、选择)的R等价物

ijxebb2r  于 2023-01-24  发布在  Python
关注(0)|答案(2)|浏览(133)

我试图在一个R Dataframe 中基于一组互斥的条件创建一个新列。在python上有一个聪明的方法可以实现这个目的,使用www.example.com(conditions,choices),而不是np.where(See this solved question)。我一直在R上寻找一个等价的方法,它可以让我避免写一个巨大的嵌套ifelse(即equivalent of np.where)而没有成功。np.select(conditions, choices), instead of np.where ( See this solved question ). I've been looking for an equivalent on R that allows me to avoid writing a gigantic nested ifelse (which is the equivalent of np.where ) without any success.
我的条件数量可以改变,我正在实现一个函数,因此,和equivalent可能真的很有帮助,有什么选项可以做到这一点吗?我是R新手,来自python。
谢谢大家!

owfi6suc

owfi6suc1#

可以,您可以在R中使用case_when

library(dplyr)
mtcars%>%
  mutate(cyl2=case_when(cyl>7~"High",
                        cyl==6~"Medium",
                        TRUE~"Low"))

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb   cyl2
1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4 Medium
2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4 Medium
3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1    Low
4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1 Medium
5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2   High
ep6jt1vc

ep6jt1vc2#

还有cut(),* 将数值转换为因子 *,带或不带您自己的标签:

df <- data.frame(a = 1:10)

df$b <- cut(df$a, 
            breaks = c(-Inf,3,7,Inf), 
            labels = c("lo", "med", "hi"))

df$c <- cut(df$a, 
            breaks = c(-Inf,3,7,Inf))

df
#>     a   b        c
#> 1   1  lo (-Inf,3]
#> 2   2  lo (-Inf,3]
#> 3   3  lo (-Inf,3]
#> 4   4 med    (3,7]
#> 5   5 med    (3,7]
#> 6   6 med    (3,7]
#> 7   7 med    (3,7]
#> 8   8  hi (7, Inf]
#> 9   9  hi (7, Inf]
#> 10 10  hi (7, Inf]

相关问题