首页 > 解决方案 > 如何在同一函数中使用 ifelse / lag / mutate 替换值和单词?

问题描述

我有类似的数据。

v1 <- c("Fail", 20, 30, "Out", NA, 32, 33, 10)
v2 <- c(10, NA, NA, "Out", "Fail", 34, 35, 30)
df <- data.frame(v1,v2)

我也需要转换这个数据框。这样'words'orNA就是前面的信息,或者如果没有前面的信息,需要后面再去取信息。

在此处输入图像描述

我如何才能使用现代编程实际做到这一点R?根据这个链接,我正在做这样的事情。

df <- df %>% mutate(v11 = ifelse(v1 %in% "Fail", lag(),
                     ifelse(v1 %in% "Out", lag()),
                     ifelse(is.na(v1) %in% lag(), v1)))

标签: rdataframedplyrtidyverse

解决方案


解决方案来自zoo,na.locf

df[which(df=="Fail" | df=='Out')]='NA'
zoo::na.locf(zoo::na.locf(df),fromLast=T)
  v1 v2
1 20 10
2 20 10
3 30 10
4 30 10
5 30 10
6 32 34
7 33 35
8 10 30

推荐阅读