【问题标题】:if statement with dates in R在 R 中带有日期的 if 语句
【发布时间】:2015-02-07 14:57:13
【问题描述】:

我有一个日期格式的数据框 (df)。它的一个样本是这样的:

df<- as.data.frame(as.factor(c("16.04.2015", "04.08.2014", "11.09.2013",  "20.11.2015", "04.04.2014")))
colnames(df)<-"date"

即;

date
16.04.2015
04.08.2014
11.09.2013
20.11.2015
04.04.2014

我想在两个特定日期之间分配“1”。假设我想为 10.02.2014 和 15.08.2014 之间分配“1”日期。让“值”列定义为分配值。所以想要的输出是:

date        value
16.04.2015  0
04.08.2014  1
11.09.2013  0
20.11.2015  0
04.04.2014  1

如何使用 R 中的 if 语句来做到这一点?或者还有其他方法吗?我会很高兴得到任何帮助。非常感谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用 between 中的 data.table

    library(data.table)
    setDT(df)[, value:=(as.Date(date, '%d.%m.%Y') %between% 
                           c('2014-02-10', '2014-08-15'))+0L][]
    #         date value
    #1: 16.04.2015     0
    #2: 04.08.2014     1
    #3: 11.09.2013     0
    #4: 20.11.2015     0
    #5: 04.04.2014     1
    

    【讨论】:

    • @orcim 很高兴为您提供帮助
    【解决方案2】:

    与流行的看法相反,绝对没有必要使用数据表

    df <- data.frame(date = as.Date(c("16.04.2015", "04.08.2014", "11.09.2013",
                                      "20.11.2015", "04.04.2014"), '%d.%m.%Y'))
    
    
    
    `%between%` <- function(x, interval) x >= interval[1] & x <= interval[2]
    
    df <- within(df, value <- 1 * (date %between% as.Date(c('2014-02-10', '2014-08-15'))))
    
    #         date value
    # 1 2015-04-16     0
    # 2 2014-08-04     1
    # 3 2013-09-11     0
    # 4 2015-11-20     0
    # 5 2014-04-04     1
    

    【讨论】:

    • 如何概括日期?例如c('%Y-02-10', '%Y-08-15')
    • @havefun 你的意思是sprintf(c('%s-02-10', '%s-08-15'), 2018:2019) 还是sprintf(c('%s-02-10', '%s-08-15'), 2018)
    • 我想确定多年的日期间隔(例如 2011-02-10 和 2012-02-10 应该返回相同的值)。我尝试了建议的代码,但无论间隔设置如何,它都只能工作一年。
    • 问题是函数'between' 总是取间隔的第一个和第二个日期。 x &gt;= interval[1] &amp; x &lt;= interval[2]
    • @havefun 所以你正在寻找类似x &gt;= interval[1] &amp; x &lt;= tail(interval, 1) 的东西?或x &gt;= interval[1] &amp; x &lt;= interval[length(interval)]?
    猜你喜欢
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多