【问题标题】:"if" function for year and day年份和日期的“if”函数
【发布时间】:2013-04-05 16:59:02
【问题描述】:

在我的数据集中,我有 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 条件的长度 > 1 并且只使用第一个元素

问题出在哪里?

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    错误告诉您if 的子句应该只是一个单个值
    TRUEFALSE,但不是 例如c(TRUE, TRUE, FALSE)

    所以如果尝试完成类似的事情

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

    基本的if 语句将不起作用。
    该语句将只查看 first 值(如警告所示)。

    对于这种情况,要使用的语句是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]
    

    【讨论】:

    • 我希望没关系,我只是把我的一个班轮卷进你的,因为你在解释上付出了更多的努力。
    • @Joran,当然。我想详细说明一下,因为if 是一个缺乏矢量化的有趣案例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多