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`

驚いたことに、実際の DB でスクリプトを起動すると、次の 2 つのことが起こります。

  • 新しい列の期間には、いくつかの 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一度に 1 つの要素Month == 2:10を調べて比較を行いますが、要素をペアごとに比較し、各ペアごとの比較が true か false かを示すベクトルを返します。

%in%要素がベクター内にあるかどうかに応じて、true または false を返す whichを使用します。

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