0

首先,我声明我检查了所有相关问题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`

令人惊讶的是,当我在真实数据库上启动脚本时,会发生两件事:

  • 在新列 Period 中出现一些 M
  • 没有警告出来

我现在对如何ifelse工作感到非常困惑。我希望有人能澄清这个函数是如何工作的,以及如何正确键入脚本以获得正确的结果。

4

2 回答 2

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"
于 2013-01-18T13:09:36.480 回答
3

你的比较是错误的形式。ifelse一次通过一个元素进行比较,而Month == 2:10将成对比较元素并返回一个向量,指示每个成对比较是真还是假。

您想使用%in%which 返回 true 或 false 取决于元素是否在向量中:

Period<-with(DB,ifelse(Month %in% 2:10,"M","R")))
于 2013-01-18T13:11:21.733 回答