“if”功能为年和日

时间:2013-04-05 16:59:03

标签: r if-statement

在我的数据集中,我有2年的数据,因此有730个条目。问题是,“年份日”栏目的第1年为1至365,第2年为1。

我希望“Day of Day”列中的值为1到730。

我的“新手功能”:

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

没有让我更进一步。它得到的错误是:

  

if if(z&lt; 0){:&gt;条件的长度> 1,只使用第一个元素

问题出在哪里?

1 个答案:

答案 0 :(得分:4)

错误告诉您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]