2

私のデータセットには 2 年間のデータがあるため、730 のエントリがあります。問題は、列「Day of Year」の形式が 1 から 365 までで、1 年目と 2 年目も同じであることです。

「年間通算日」列の値を 1 ~ 730 にしたい。

私の「初心者機能」:

set$DoYnew = if (seq(set$Year==2002)) {set$DoY <- set$DoY+365}

それ以上私を取得しません。取得するエラーは次のとおりです。

if (z < 0) { :> 条件の長さが 1 を超えており、最初の要素のみが使用されます

問題はどこだ?

4

1 に答える 1

4

このエラーは、 to 句が 単一の値ifであるべきであることを示しています。 つまり、 または のいずれかですが、例ではありません
TRUEFALSEc(TRUE, TRUE, FALSE)

したがって、次のようなことを達成しようとすると

if (c(TRUE, FALSE, TRUE))
  < DO SOMETHING WHEN TRUE >
  < DO SOMETHING DIFFERENT WHEN FALSE >

基本的なifステートメントは機能しません。
ステートメントは最初の値だけを調べます (警告が示すように)。

そのような状況では、使用するステートメントは次のとおりですifelse(@Joranが回答で指摘したように)

ifelse ( c(TRUE, FALSE, TRUE), 
  < DO SOMETHING WHEN TRUE > , 
  < DO SOMETHING DIFFERENT WHEN FALSE > )

また

set$DoYnew <- ifelse(set$Year == 2002,DoY + 365,DoY)

さらに、データが data.frame にある場合は、必要に応じてサブセット化できます。

 myDF$day[myDF$Year==2002] <- 365 + myDF$day[myDF$Year==2002]

 # or if using data.table: 

 myDT[year==2002, day := day + 365]
于 2013-04-05T17:41:24.623 に答える