使用dplyr更改变量的值

igetnqfo  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(149)

我经常需要根据另一个变量的值更改一个变量的值,如下所示:

mtcars$mpg[mtcars$cyl == 4] <- NA

我试着用dplyr来做这个,但是失败得很惨:

mtcars %>%
mutate(mpg = mpg == NA[cyl == 4]) %>%
as.data.frame()

我怎么能用dplyr做到这一点呢?

sf6xfgos

sf6xfgos1#

我们可以使用replace将'mpg'中的值更改为对应于cyl==4NA

mtcars %>%
     mutate(mpg=replace(mpg, cyl==4, NA)) %>%
     as.data.frame()
krugob8w

krugob8w2#

下面是使用简单ifelse的另一个选项:

library(dplyr)
mtcars %>%
  mutate(mpg = ifelse(cyl == 4, NA, mpg))

输出头:

#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710            NA   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2

另一个选项可以是使用case_when,其可以被扩展到更多条件:

mtcars %>%
  mutate(mpg = case_when(cyl == 4 ~ NA,
                         TRUE ~ mpg))

相关问题