简体   繁体   中英

Replacing subsetted mutated values back into the main dataset in dplyr R

What I'm trying to do is filter a subset out of a main dataset, modify the values and then replace them back into the main dataset. For example:

x<-diamonds %>% filter(color == "E") %>% mutate(editPrice= price/4)

So in this example I'd replace the colour "E" prices in the main "diamonds" with my "editPrice" variable, without over writing the other colour values.

My current solution is to build a unique ID for the subset and main set then right_join them based on that variable, however this incurs lots of NA 's into my total dataset. For example:

x$id<- paste(x$cut,"_",x$clarity,"_",x$table)
x1<-diamonds %>% filter(color != "E")
x1$id<- paste(x1$cut,"_",x1$clarity,"_",x1$table)
right_join(x1,x,by="id")

Thanks for your help!

We can use case_when

library(dplyr)
diamonds %>%
    mutate(editPrice = case_when(color == "E" ~ price/4, 
                                 TRUE ~ as.numeric(price)))

or if_else or ifelse

diamonds %>% 
      mutate(editPrice = if_else(color == "E",  price/4,  as.numeric(price)))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM