我已经阅读了Programming with dplyr文档并尝试编写一个围绕该case_when()
函数的简单函数。
library(dplyr)
data_test <- data.frame(
a = rep(c("a", "b", "c"), each = 5),
b = rnorm(15)
)
fun_test <- function(df, var1, var2) {
var1 <- enquo(var1)
var2 <- enquo(var2)
df <- mutate(df,
c = case_when(
!!var1 == "a" ~ 1,
!!var1 == "b" ~ 2,
!!var1 == "c" ~ 3
),
d = case_when(
!!var2 > 0 ~ 1,
!!var2 < 0 ~ 0
))
df
}
fun_test(data_test, a, b)
我希望新列c
,并d
会基于价值创造a
和b
,而是他们只是NA
和0
。任何想法为什么会这样?
干杯。
你需要在!!vars周围加上括号,所以!!var1 == "a" ~ 1
应该是(!!var1) == "a" ~ 1
:
fun_test <- function(df, var1, var2) {
var1 <- enquo(var1)
var2 <- enquo(var2)
df <- mutate(df,
c = case_when(
(!!var1) == "a" ~ 1,
(!!var1) == "b" ~ 2,
(!!var1) == "c" ~ 3
),
d = case_when(
(!!var2) > 0 ~ 1,
(!!var2) < 0 ~ 0
))
df
}
fun_test(data_test, a, b)
# a b c d
# 1 a 0.70352390 1 1
# 2 a -0.10567133 1 0
# 3 a -1.25864863 1 0
# 4 a 1.68443571 1 1
# 5 a 0.91139129 1 1
# 6 b 0.23743027 2 1
# 7 b 1.21810861 2 1
# 8 b -1.33877429 2 0
# 9 b 0.66082030 2 1
# 10 b -0.52291238 2 0
# 11 c 0.68374552 3 1
# 12 c -0.06082195 3 0
# 13 c 0.63296071 3 1
# 14 c 1.33551762 3 1
# 15 c 0.00729009 3 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句