根据.R中的条件更改过滤中的运算符
Change Operator in filtering based on condition in .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 )
}
但如果我只 select 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")
您可以根据 country
的 length
应用不同的 filter
函数:
library(dplyr)
DF = function(country = c("Belgium", "USA", "India") {
if(length(country) == 1)
some_data <- data %>% filter(Actor1CountryCode == country |
Actor2CountryCode == country)
else
some_data <- data %>% filter(Actor1CountryCode %in% country &
Actor2CountryCode %in% country)
return(some_data)
}
您可以使用 `` 像函数一样使用 |
运算符:
`|`(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")
我正在编写一个函数,它应该根据输入向量的长度以两种不同的方式过滤数据!
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 )
}
但如果我只 select 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")
您可以根据 country
的 length
应用不同的 filter
函数:
library(dplyr)
DF = function(country = c("Belgium", "USA", "India") {
if(length(country) == 1)
some_data <- data %>% filter(Actor1CountryCode == country |
Actor2CountryCode == country)
else
some_data <- data %>% filter(Actor1CountryCode %in% country &
Actor2CountryCode %in% country)
return(some_data)
}
您可以使用 `` 像函数一样使用 |
运算符:
`|`(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")