将子集化的变异值替换回dplyr R

时间:2018-02-02 10:55:00

标签: r dataframe dplyr

我尝试做的是从主数据集中过滤子集,修改值,然后将它们替换回主数据集。例如:

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

所以在这个例子中,我将替换颜色&#34; E&#34;主要&#34;钻石的价格&#34;用我的&#34; editPrice&#34;变量,没有过度写入其他颜色值。

我目前的解决方案是根据该变量为子集和主集创建一个唯一的ID然后right_join,但这会在我的总数据集中产生大量的NA。例如:

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")

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我们可以使用case_when

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

if_elseifelse

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