我正在寻找一种基于两个条件仅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)
}