首页 > 解决方案 > 根据测量日期与另一个数据集中的其他两个日期相比,标记一个数据集中的行

问题描述

library(data.table)
testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04",
                                     "2013-10-05","2013-11-06")), 
                      yr = c(2013,2013,2013,2013,2013), 
                      mo = c(07,08,09,10,11),
                      da = c(02,03,04,05,06), 
                      plant = LETTERS[1:5], 
                      product = as.factor(letters[26:22]), 
                      rating = runif(25))

我有这个数据集,我想为每一行创建一个类别或根据日期列在该行上命名。我想将此日期与另一个数据集中的日期进行比较:

library(lubridate)
splitDates <- ymd(c("2013-06-10", "2013-08-15", "2013-10-06"))

使用 splitDates 我想评估 splitDates 中的哪个值在进行测量之前最后出现。(如果您想象从 2013 年 6 月 10 日到但不包括 2013 年 8 月 15 日进行了一项新实验,我想确定测量属于哪个实验)。

我可以看到这个新列中的前五行应该是这样的:

NewColumn <- c("2013-06-10", "2013-06-10", "2013-08-15", "2013-08-15", "2013-10-06")

         date   yr mo da plant product     rating  NewColumn
1: 2013-07-02 2013  7  2     A       z 0.02522850 2013-06-10
2: 2013-08-03 2013  8  3     B       y 0.28274066 2013-06-10
3: 2013-09-04 2013  9  4     C       x 0.86314441 2013-08-15
4: 2013-10-05 2013 10  5     D       w 0.01670862 2013-08-15
5: 2013-11-06 2013 11  6     E       v 0.16034175 2013-10-06
...

我不知道该怎么做。

标签: rdatesplitdata.table

解决方案


这是我的看法

library(dplyr)
dta <- data.frame(NewColumn=splitDates,newvar=1:3)
testset$newvar <- sapply(testset[,1], function(x) ifelse(x<splitDates[2],1,ifelse(x<splitDates[3],2,3)))
final_data <- semi_join(testset,dta,by="newvar")

数据:

testset <- data.table(date=as.Date(c("2013-07-02","2013-08-03","2013-09-04",
                                 "2013-10-05","2013-11-06")), 
                  yr = c(2013,2013,2013,2013,2013), 
                  mo = c(07,08,09,10,11),
                  da = c(02,03,04,05,06), 
                  plant = LETTERS[1:5], 
                  product = as.factor(letters[26:22]), 
                  rating = runif(25))

splitDates <- ymd(c("2013-06-10", "2013-08-15", "2013-10-06"))

推荐阅读