2

在我的数据集中,我有 2 年的数据,所以有 730 个条目。问题是,第 1 年的“Day of Year”列的格式为 1 到 365,第 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应该只有一个
即,要么TRUEFALSE,但不是例如c(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 回答