首页 > 解决方案 > 根据.R中的条件更改过滤中的运算符

问题描述

我正在编写一个函数,它应该根据输入向量的长度以两种不同的方式过滤数据!

library(dplyr)
DF = function(country  = c("Belgium", "USA", "India")) {

operator = ifelse(length(country) == 1,  "|" , "&")

   some_data =  data %>% 
               filter(Actor1CountryCode %in% country   &   Actor2CountryCode %in% country)

   return( some_data )
   }

但如果我country = "Germany"只选择,我希望运算符从“&”切换到“|”。

运算符应该以某种方式成为最终过滤器功能的一部分。我的“真实”过滤功能非常大,所以我只想使用一个过滤功能。有人知道如何编写智能函数吗?

解决方案(如果要复制):

library(dplyr)

data = data.frame( 
  Actor1CountryCode = c("Belgium", "USA", "India", "Pakistan", "Germany"),
  Actor2CountryCode = c("Belgium", "USA", "India", "Germany", "Russia") , 
  sentiment         = c(  1,2,3,4,5 )  )


DF <- function(country) {
  
   operator <- if (length(country) == 1)  `|` else  `&`
   
   some_data =  data %>% 
     filter(operator(Actor1CountryCode %in% country, Actor2CountryCode %in% country)) 

     return(some_data)
 }
 

DF(c("Belgium", "USA", "India"))
DF("Germany")  

标签: rfunctiondplyroperatorsfiltering

解决方案


您可以使用 ``|像函数一样使用运算符:

`|`(TRUE, FALSE)
[1] TRUE

因此,这是一种可能的解决方案:

DF <- function(country) {
  
   operator <- if (length(country) == 1)  `|` else  `&`
   
   some_data =  data %>% 
     filter(operator(Actor1CountryCode %in% country, Actor2CountryCode %in% country)) 
 }
 

DF(c("Belgium", "USA", "India"))
DF("Germany")  

推荐阅读