【问题标题】:How to mutate with ifelse within a function如何在函数中使用 ifelse 进行变异
【发布时间】:2019-07-16 14:09:25
【问题描述】:

我正在尝试使用 ifelse 创建一个函数,但不断收到错误消息。我想创建一个标志变量,如果两个变量都 = abs(1),则填充 1,否则填充 0

我可以通过输入 2 个特定变量来运行代码,但是在将其转换为函数时遇到了麻烦。任何帮助表示赞赏!

#this is the code I got to work
df <- df %>%
mutate(Flag=ifelse(PTO_1== abs(1) && PTO_2 == abs(1), 1, 0))

#now trying to turn it into a function
flag <- function(var1,var2) {
df <- df %>%
mutate(Flag=ifelse(var1== abs(1) && var2 == abs(1), 1, 0))
}

#trying out the function, and get an error message
flag(PTO_1,PTO_2)

我希望创建一个新的“标志”变量,但却收到一条错误消息:

找不到对象“PTO_1”

【问题讨论】:

  • 你为什么使用abs(1),因为它总是简单的1
  • 这个“只是”与dplyr NSE 有关。看看enquosym!! 或最近来自rlang{{}}。更多详情here.

标签: r dplyr


【解决方案1】:

您收到错误消息是因为 PTO_1 正如错误消息所暗示的那样,不是您环境中的变量。

df <- data.frame("PTO_1" = rpois(n = 5, lambda = 1),
                 "PTO_2" = rpois(n = 5, lambda = 1))
  PTO_1   PTO_2
1     1       3
2     2       2
3     0       0
4     1       1
5     0       1

#define the function to take the variable vectors as inputs:
flag <- function(x,y) {
  Flag <- as.numeric(x == 1 & y == 1)
  return(Flag)
}

#use mutate to send those variables through the function
df %>% mutate(Flag = flag(PTO_1, PTO_2))

  PTO_1 PTO_2 Flag
1     1     3    0
2     2     2    0
3     0     0    0
4     1     1    1
5     0     1    0

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2022-11-10
    相关资源
    最近更新 更多