函数中的dplyr NSE模式:嵌套条件

雷米

目的是转换数据帧的列。这是示例:

  df <- data.frame( fact=c("dog",2,"NA",0,"cat",1,"Cat"),
              value=c(4,2,6,0,9,1,3) ); df$fact <- as.factor(df$fac)

  func <- function(data,fac,val){
          data <- data %>%  
          mutate_(fac= interp(~tolower(fac), fac=as.name(fac)) ) %>%
          mutate_(val= interp(~ifelse(fac=='cat',1*val,
                       ifelse(fac=='dog',2*val,0)), fac=as.name(fac), val=as.name(val)))
  return(data) } 

电话:

new.df <- func(df,"fact","value")

     fact value  fac val
   1  dog     4  dog  8
   2    2     2   2   0
   3   NA     6  na   0
   4    0     0   0   0
   5  cat     9 cat   9
   6    1     1   1   0
   7  Cat     3 cat   0

存在两个问题:(1)-与“ Cat”相关联的值为false;应该为3 * 1 = 3(2)-理想情况下,调用将返回原始的data.framedf以及转换后的factvalue变量。

有什么想法吗?谢谢你们。

编辑:请注意,df还有另一列third应不受对fact执行的操作的影响value

塔拉特

如果要返回具有原始名称原始列(可能在data.frame中包括其他列),则可以使用稍微不同的dplyr-approachmutate_each代替mutate

library(lazyeval)
library(dplyr)

func <- function(data,fac,val) {
  data %>%  
    mutate_each_(interp(~tolower(var), var = as.name(fac)), fac) %>% 
    mutate_each_(interp(~ifelse(col =='cat', var, ifelse(col == 'dog',2*var, 0)), 
             var=as.name(val), col = as.name(fac)), val)
}

使用功能:

func(df, "fact", "value")
#  fact value
#1  dog     8
#2    2     0
#3   na     0
#4    0     0
#5  cat     9
#6    1     0
#7  cat     3

如果您希望保留数据中的其他列,则表明了与akruns答案的区别(而由于,这些列将使用akrun的方法删除transmute):

df$some_column <- letters[1:7]  # add a new column

使用该函数后,其他列现在仍保留在您的数据中,并且修改后的列保留其原始名称:

func(df, "fact", "value")
#  fact value some_column
#1  dog     8           a
#2    2     0           b
#3   na     0           c
#4    0     0           d
#5  cat     9           e
#6    1     0           f
#7  cat     3           g

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dplyr管道中嵌套函数的执行顺序

来自分类Dev

用户编写的函数中存在purrr + dplyr NSE问题

来自分类Dev

R函数用于dplyr中基于多列的条件

来自分类Dev

dplyr:NSE加入中(作者)

来自分类Dev

如何在dplyr函数的左侧执行NSE?

来自分类Dev

编程功能:DPLYR和PURRR中的NSE

来自分类Dev

使用dplyr(R)将条件表达式传递到用户定义的函数中

来自分类Dev

dplyr中的条件求和

来自分类Dev

dplyr中的条件案例

来自分类Dev

dplyr中的条件替换

来自分类Dev

Spark Scala中嵌套模式的字符串函数

来自分类Dev

Python中的嵌套函数模式的用例是什么?

来自分类Dev

dplyr中的rowMeans函数

来自分类Dev

dplyr中的排名函数

来自分类Dev

R中的嵌套dplyr循环

来自分类Dev

R dplyr函数计算条件距离

来自分类Dev

函数中的主要dplyr函数

来自分类Dev

总结dplyr中的数学条件

来自分类Dev

在嵌套数据框中应用条件函数

来自分类Dev

为什么嵌套XPATH条件中的函数会导致错误?

来自分类Dev

在嵌套数据框中应用条件函数

来自分类Dev

如何使用dplyr在NSE中获取变量的名称

来自分类Dev

使用 NSE 时出错(在 dplyr 中):找不到对象“值”

来自分类Dev

猫鼬中的嵌套模式

来自分类Dev

猫鼬中的嵌套模式

来自分类Dev

嵌套函数或函数中的调用函数

来自分类Dev

Swift中的嵌套函数

来自分类Dev

Javascript中的嵌套函数

来自分类Dev

函数中的计数(dplyr)问题