根据条件编辑变量观测值,但不满足R

时间:2019-01-11 02:08:00

标签: r dplyr

我有以下数据框,我正在尝试更改一些观察结果...

lease<-c('190', '190', '190', '190', '191', '191', '191', '191')
year<-c(2016, 2017, 2016, 2018, 2016, 2017, 2016, 2018)
dive_type<-c('35m','35m', '35m','35m', '35m','35m', '35m','35m')
df=data.frame(lease, year, dive_type)

我的代码:

dfi<-df%>%
   mutate(dive_type = case_when(lease==190 & (year %in% c(2016, 2017))~ 
 'Farm dive'))

结果:

lease  year   dive_type
<fctr> <dbl>  <chr>                  
190    2016   Farm dive     
190    2017   Farm dive     
190    2016   Farm dive     
190    2018   NA        
191    2016   NA        
191    2017   NA        
191    2016   NA        
191    2018   NA

问题是dive_type中的NA,我希望它们与原始数据帧(即'35m')保持不变。这只是一个更复杂的数据集的示例,该数据集具有许多级别的dive_type和其他变量,因此编写代码以重新填充NA并不方便。代码的帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您需要在TRUE中包括case_when部分,其中应包括上述条件都不匹配的所有情况。

library(dplyr)

df %>%
  mutate(dive_type = case_when(lease==190 & (year %in% c(2016, 2017)) ~ 'Farm dive', 
                           TRUE ~ as.character(dive_type)))


#  lease year dive_type
#1   190 2016 Farm dive
#2   190 2017 Farm dive
#3   190 2016 Farm dive
#4   190 2018       35m
#5   191 2016       35m
#6   191 2017       35m
#7   191 2016       35m
#8   191 2018       35m