寻找mutate_if,但寻找列而不是列

时间:2019-03-16 04:21:48

标签: r dplyr magrittr

我正在寻找一种基于两个条件仅mutate只对数据帧的某些行进行编码的方法。第一个条件始终相同(x==1)。第二个是recode()的特定值,始终满足第一个条件。

这是我所拥有的非常简单的版本:

dat <- data.frame(x = c(1, 1, 2, 2),
                  y = c("a", "b", "a", "b"))

dat

#  x y
#1 1 a
#2 1 b
#3 2 a
#4 2 b

这就是我想要的:

#  x y z
#1 1 a Apple
#2 1 b Banana
#3 2 a a
#4 2 b b

嵌套的ifelse语句有效,但是我要定义很多y,并且我不想继续定义x

dat %>%
  mutate(z = ifelse(x==1 & y=="a", "Apple",
             ifelse(x==1 & y=="b", "Banana", 
                    y)))

管道中的以下if()不起作用,但这是我要遵循的想法类型:当满足特定条件时,进行一些重新编码。在实际的用例中,我需要进行大量的编码,因此需要高效的方法。我正在尝试在未显示的长管道中间进行此操作。

# DOES NOT WORK
dat %>%
  {if(x==1) 
    mutate(., 
           z = recode(y, 
                      "a" = "Apple",
                      "b" = "Banana")
           ) else 
    mutate(., z = y) 
  } 

0 个答案:

没有答案