首先,我声明我检查了ifelse
上的所有相关问题,但没有成功。
我试图使用ifelse
根据月份在野生动物物种中添加一个因子(交配期)。 DB的一个例子如下:
> DB <- data.frame(ID = 1:6, Month = 1:12)
colnames(DB) <- c("ID","Month")
我试过的是:
Period<-with(DB,ifelse(Month==c(2,3,4,5,6,7,8,9,10),"M","R")))
但结果与条件不匹配:
(Period)[1] "R" "R" "R" "R" "R" "R" "R" "R" "R" "R" "R" "R"
并且还有一个警告:
Warning message:
In Month == c(2, 3, 4, 5, 6, 7, 8, 9, 10) :
longer object length is not a multiple of shorter object length`
令人惊讶的是,当我在真实数据库上启动脚本时,会发生两件事:
我现在对ifelse
的工作原理感到困惑。我希望有人能澄清这个函数的工作原理以及如何正确输入脚本以获得正确的结果。
答案 0 :(得分:3)
使用%in%
,如下所示:
Period<-with(DB,ifelse(Month %in% c(2,3,4,5,6,7,8,9,10),"M","R"))
Period
[1] "R" "M" "M" "M" "M" "M" "M" "M" "M" "M" "R" "R"
答案 1 :(得分:3)
您的比较形式错误。 ifelse
一次经过一个元素进行比较,而Month == 2:10
将成对比较元素并返回一个向量,指示每个成对比较是真还是假。
你想使用%in%
,它返回true或false,具体取决于元素是否在向量中:
Period<-with(DB,ifelse(Month %in% 2:10,"M","R")))