【发布时间】:2020-04-02 11:28:56
【问题描述】:
我想运行一个函数来测试一个值是否存在于数据集中。我一直在寻找答案,并找到了一种解决方法,但它并不那么整洁,我很好奇为什么我最初的尝试失败了。
这是一个简化的数据集
df <- structure(list(country = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("IRE","USA"),
class = "factor"), year = structure(c(1L, 2L, 3L, 1L, 2L, 3L), .Label = c("1990", "1995", "2000"),
class = "factor")), class = "data.frame", row.names = c(NA, -6L))
> df
country year
1 IRE 1990
2 IRE 1995
3 IRE 2000
4 USA 1990
5 USA 1995
6 USA 2000
如果存在特定的国家代码和年份,我希望我的函数返回 1,否则返回 0。这是工作代码:
myFunc <- function(x,y){
p.ans <- df %>% filter(year == y)
ifelse(x %in% p.ans$country, 1, 0)
}
> myFunc("USA", 1995)
[1] 1
> myFunc("USA", 1997)
[1] 0
但是为什么这个替代代码不起作用?有没有变种?
myFunc <- function(x,y){
df %>% filter(year == y) %>% ifelse(x %in% country, 1, 0)
}
> myFunc("USA", 1997)
Error in ifelse(., x %in% country, 1, 0) : unused argument (0)
谢谢!
【问题讨论】:
-
为什么要返回
1或0而不是TRUE或FALSE?
标签: r function if-statement