【问题标题】:case_when() mutate in pipe but maintain original datacase_when() 在管道中发生变异但保留原始数据
【发布时间】:2021-04-07 22:10:48
【问题描述】:

我有一个 df,我根据外部数据创建了一个列。我有大约 4 个值在外部数据中没有匹配,所以它们在我的列中有“NA”。我想使用 mutate() 和 case_when() 手动修复 NA,但我不知道如何告诉我的 case_when() 来维护不以“NA”开头的数据。下面的示例数据:

data(mtcars)
mtcars %>%
  mutate(carb = case_when(
    cyl == 4 ~ 5000
  ))
cyl    carb
<dbl> <dbl>

6   NA          
6   NA          
4   5000            
6   NA          
8   NA          
6   NA          
8   NA          
4   5000            
4   5000            
6   NA  

如果这是我的数据,我希望 5000 以及 'carb' 列中的原始数据。

谢谢!

【问题讨论】:

  • , TRUE~carb)) in case_when

标签: r dplyr


【解决方案1】:

幸运的是,这个问题相对来说是微不足道的。在case_when()中,我们按顺序检查条件列表,因此如果第二个参数具有条件TRUE,并且如果满足此条件,我们将结果设置为carb,我们可以获得我们的结果。

我在下面制作了一个说明性的表述。

library(tidyverse)

mtcars %>%
  mutate(carb = case_when(
    cyl == 4 ~ 5000,
    TRUE ~ carb
  )) %>% 
  head(10)
#>                    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        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4 5000
#> 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
#> Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
#> Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4 5000
#> Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4 5000
#> Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4

reprex package (v2.0.0) 于 2021-04-07 创建

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2017-09-27
    • 2019-11-19
    • 2023-02-16
    • 2010-12-07
    相关资源
    最近更新 更多