【发布时间】:2018-12-31 14:08:51
【问题描述】:
一个(我希望)非常简单的问题。我想使用 case_when() 或与之等效的东西作为一个干净的解决方案,根据变量的值分配要使用的函数。所以,我想做这样的事情:
library(tidyverse)
library(lubridate)
library(nycflights13)
#small data frame of new years day flights from JFK
df1<-flights %>% filter(year==2013,month==1,day==1,origin=="JFK")
#use min_ind as an indicator (in practice this would be a variable from my dataset
min_ind<-1
现在,我想要一种简单的方法来根据 min_ind 的值将函数分配给 func_test。我可以这样做:
if(min_ind==1)
func_test<-min
if(min_ind!=1)
func_test<-max
#test it
func_test(df1$distance)
#reverse
min_ind<-0
if(min_ind==1)
func_test<-min
if(min_ind!=1)
func_test<-max
func_test(df1$distance)
这很好用。当 min_ind 为 1 时,我得到最小值,当它不是 1 时,我得到最大值。我想做的是通过 case_when() 来完成这项任务,因为我有一组 4 或 5 个函数,我可能想对数据中的值使用条件。这样的事情可能吗?
func_test<-case_when(
min_ind==1 ~ min,
min_ind!=1 ~ max
)
我收到错误代码 Error in value[[1]][rep(NA_integer_, m)] : 'builtin' 类型的对象不是子集
感谢您的任何建议。
【问题讨论】:
-
听起来你可能正在寻找
base::switch()