0

条件文に基づいて列に値を代入しようとしていますが、POSIXct 形式が原因でうまくいかないようです。時間の列があり、次のようなもので昼/夜/夜明け/夕暮れに割り当てたいと思います:

if(t40636$time>t40636$dawn.b&t40636$time<t40636$dawn.e){
  t40636$time.periods=1
} else {
  if(t40636$time>t40636$mid.day.b&t40636$time<t40636$mid.day.e){
    t40636$time.periods=2
  } else {
    if(t40636$time>t40636$dusk.b&t40636$time<t40636$dusk.e){
      t40636$time.periods=3
    } else {
      if(t40636$time>t40636$mid.night.b&t40636$time<t40636$mid.night.e){
        t40636$time.periods=4
        } else {
          t40636$time.periods=0
        }
    }
  }
}

ただし、このコードは列の形式が原因で機能せず、以下に示す行列が生成されます (time.periods 列に 0 のみ)。

     Date Temp..ºC. Depth..m. Light  time time.at.depth dawn.b dawn.e dusk.b
1 2012-06-19     14.47     -21.5   255 15:32             0  01:42  04:42  19:13
2 2012-06-19     16.99     -20.2   255 15:37             5  01:42  04:42  19:13
3 2012-06-19     12.60     -18.8   255 15:41             4  01:42  04:42  19:13
4 2012-06-19     16.36     -17.5   255 15:46             5  01:42  04:42  19:13
5 2012-06-19     16.36     -13.4   255 15:51             5  01:42  04:42  19:13
6 2012-06-19     17.94      -2.7   255 15:56             5  01:42  04:42  19:13
  dusk.e mid.day.b mid.day.e mid.night.b mid.night.e time.periods
1  22:13     10:27     13:27       22:27       01:27            0
2  22:13     10:27     13:27       22:27       01:27            0
3  22:13     10:27     13:27       22:27       01:27            0
4  22:13     10:27     13:27       22:27       01:27            0
5  22:13     10:27     13:27       22:27       01:27            0
6  22:13     10:27     13:27       22:27       01:27            0

ifelse は、私が望むものに近いものを生成しますが、複数のステートメントを実行することはできません。どんな提案でも大歓迎です。

t40636$time.periods=ifelse(t40636$time>t40636$dawn.b&t40636$time<t40636$dawn.e,1,0)
4

1 に答える 1

0

「複数のif-elseステートメントを修正する」に対する答えは、ほとんどの場合、「複数のif-else構文を使用しないでください」です。

R言語には非常に優れswitchた機能があり、そのヘルプページにはいくつかの優れた例があります。

于 2013-01-28T19:41:39.897 に答える