在我的数据集中,我有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,只使用第一个元素
问题出在哪里?
答案 0 :(得分:4)
错误告诉您if
的子句应该只是单值。
即,TRUE
或FALSE
,但不,例如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]