Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr v.0.6.0标准评估变异_R_Dplyr - Fatal编程技术网

dplyr v.0.6.0标准评估变异

dplyr v.0.6.0标准评估变异,r,dplyr,R,Dplyr,我试图在dplyrv.0.6.0中找出标准评估的新实现。我已经完成了这个小插曲,但在构建要在mutate中求值的表达式时,我仍在苦苦挣扎 假设我想做一个函数,为var等于某个值的每一行的x添加一个伪值。它应该在NA值和常规值下工作 library(dplyr) make_dummy_at_value <- function(x, var, value) { var_e <- enquo(var) value_e <- enquo(value) if (is.na(v

我试图在
dplyr
v.0.6.0中找出标准评估的新实现。我已经完成了这个小插曲,但在构建要在
mutate
中求值的表达式时,我仍在苦苦挣扎

假设我想做一个函数,为
var
等于某个
值的每一行的
x
添加一个伪值。它应该在
NA
值和常规值下工作

library(dplyr)
make_dummy_at_value <- function(x, var, value) {
  var_e <- enquo(var)
  value_e <- enquo(value)
  if (is.na(value)) {
    x <- x %>% mutate(dum = as.numeric(is.na(!!var_e)))
  } else {
    x <- x %>% mutate(dum = as.numeric(!!var_e == !!value_e))
  }
  return(x)
}
我想我们只能在
mutate
语句中放置一个不带引号的表达式,但是如何实现它呢


Cheers

不需要任何
enquo
,因为它是一个数字元素,而不是带引号的字符串。而且,它不是一个列。它可以直接用于
mutate/summary

 make_dummy_at_value <- function(x, var, value) {
  var_e <- enquo(var)

  if (is.na(value)) {
    x %>% 
       mutate(dum = as.numeric(is.na(!!var_e)))
  } else {
     x %>% 
        mutate(dum = as.numeric((!!var_e) == value & !is.na(!!var_e) ))
  }

}



make_dummy_at_value(x, some_var, 2)
#  some_var dum
#1       NA   0
#2        2   1
make_dummy_at_value(x, some_var, NA)
#  some_var dum
#1       NA   1
#2        2   0

make_dummy_at_value(x, some_var, 3)
#  some_var dum
#1       NA   0
#2        2   0
make_dummy_为_值%
变异(dum=as.numeric(!!var_e)=value&!is.na(!!var_e)))
}
}
使虚拟值为(x,一些变量,2)
#一些小傻瓜
#1 NA 0
#2        2   1
使虚拟值为(x,某些变量,NA)
#一些小傻瓜
#1 NA 1
#2        2   0
使虚拟值为(x,一些变量,3)
#一些小傻瓜
#1 NA 0
#2        2   0

如果目的是传递“value”的数字和字符串,则

make_dummy_at_value <- function(x, var, value) {
  var_e <- enquo(var)
   value <- enquo(value)
   value_e <- quo_name(value)

  if (is.na(value_e)) {
    x %>% 
       mutate(dum = as.numeric(is.na(!!var_e)))
  } else {
     x %>% 
        mutate(dum = as.numeric((!!var_e) == value_e & !is.na(!!var_e) ))
  }

}

make_dummy_at_value(x, some_var, 2)
#  some_var dum
#1       NA   0
#2        2   1
make_dummy_at_value(x, some_var, NA)
#  some_var dum
#1       NA   1
#2        2   0
make_dummy_at_value(x, some_var, v1)
#  some_var dum
#1       NA   0
#2        2   0

make_dummy_at_value)您是否打算在第5行写入
if(is.na(!!value_e))
 make_dummy_at_value <- function(x, var, value) {
  var_e <- enquo(var)

  if (is.na(value)) {
    x %>% 
       mutate(dum = as.numeric(is.na(!!var_e)))
  } else {
     x %>% 
        mutate(dum = as.numeric((!!var_e) == value & !is.na(!!var_e) ))
  }

}



make_dummy_at_value(x, some_var, 2)
#  some_var dum
#1       NA   0
#2        2   1
make_dummy_at_value(x, some_var, NA)
#  some_var dum
#1       NA   1
#2        2   0

make_dummy_at_value(x, some_var, 3)
#  some_var dum
#1       NA   0
#2        2   0
make_dummy_at_value <- function(x, var, value) {
  var_e <- enquo(var)
   value <- enquo(value)
   value_e <- quo_name(value)

  if (is.na(value_e)) {
    x %>% 
       mutate(dum = as.numeric(is.na(!!var_e)))
  } else {
     x %>% 
        mutate(dum = as.numeric((!!var_e) == value_e & !is.na(!!var_e) ))
  }

}

make_dummy_at_value(x, some_var, 2)
#  some_var dum
#1       NA   0
#2        2   1
make_dummy_at_value(x, some_var, NA)
#  some_var dum
#1       NA   1
#2        2   0
make_dummy_at_value(x, some_var, v1)
#  some_var dum
#1       NA   0
#2        2   0
x1 <- data.frame(col1 = c(NA, 4, 5), col2 = c('A', NA, 'B'), stringsAsFactors= FALSE)
make_dummy_at_value(x1, col1, NA)
#  col1 col2 dum
#1   NA    A   1
#2    4 <NA>   0
#3    5    B   0
make_dummy_at_value(x1, col2, NA)
#  col1 col2 dum
#1   NA    A   0
#2    4 <NA>   1
#3    5    B   0
make_dummy_at_value(x1, col2, A)
#  col1 col2 dum
#1   NA    A   1
#2    4 <NA>   0
#3    5    B   0