在filter()%>%mutate()之后,如何存储替换值?

时间:2019-07-18 00:08:26

标签: r dplyr

我正在尝试根据x列中的值替换z列中的空值。

我已经使用filter()缩小到重要行,然后再应用mutate(),但是mutate值不会在原始数据帧中替换。我可以将其存储为新的数据框,但是由于数十个条件条件中发生这种情况,因此之后合并将是一个相当头疼的问题。

制作伪数据

xx <- data.frame(x = c(1,2,3), y = c("a","","c"), z=c(5,5,""))

xx %>% filter(x == 3) %>% # filter to value of interest
  filter(z == "") %>% # filter to NA values to be replaced
 mutate(z = replace(z, z =="", 5) ) # mutate to replace NA value

如果我这样做:

xx <- xx %>% filter(x == 3) %>% # filter to value of interest
  filter(z == "") %>% # filter to NA values to be replaced
  mutate(z = replace(z, z =="", 5) ) # mutate to replace NA value

然后仅存储一行...

我正在寻找一种保留所有其他数据框数据但替换突变数据的方法。

感觉它应该是一种快速修复方法,但是被卡在上面了一段时间。

1 个答案:

答案 0 :(得分:0)

您可以在ifelse()中使用dplyr::mutate()语句。

df <- data.frame(x=sample(1:10,100,T),
                 y=sample(c(NA,1:5),100,T))

df %>% mutate(y=ifelse(is.na(y),x,y))

   x y
1  7 7
2 10 3
3  7 1
4  7 1
5 10 4
6  3 3
...