如何以这种特定方式操作数据?

时间:2017-09-21 14:47:31

标签: r data-manipulation

对模糊标题表示道歉,但问题的一部分是我不知道用什么术语来描述我在这里要做的事情。

我的数据如下:

STATE   COUNT   DATE
LA       20     20160401
ME       83     20160601
MD        4     20160701

我想要做的是能够选择一个日期(比方说20160301)并将我的数据操作如下:

STATE   COUNT   DATE      NEWER_THAN
LA       20     20160401  20160301
LA       20     20160401  20160401  
ME       83     20160601  20160301
ME       83     20160601  20160401
ME       83     20160601  20160501
ME       83     20160601  20160601
MD        4     20160701  20160301
MD        4     20160701  20160401
MD        4     20160701  20160501
MD        4     20160701  20160601
MD        4     20160701  20160701

所以LA在第一张表中的日期为20160401,所以在第二张表格中,自从我选择20160301之日或之后,第二张表中的第二行最终为2行。

同样地,ME在第一个表中的日期为201601,因此在第二个表中最后有4行,因为3月,4月,5月和6月是在我选择20160301之日或之后。

我的问题是,是否有人可以让我开始研究如何在R中实现这种类型的数据操作。

1 个答案:

答案 0 :(得分:1)

如果您转换了" DATE"将字段转换为实际的Date对象,可以通过减去它们来获得2个日期之间的差异。从这个区别你知道,你必须重复每一行多少次。 关注你的问题:

dataset <- data.frame(STATE = c("LA", "ME", "MD"), 
                  COUNT = c(20, 83, 4), 
                  DATE = c("20160401", "20160601", "20160701"), 
                  stringsAsFactors = F)

format <- "%Y%m%d"
dataset$DATE <- strptime(dataset$DATE, format)

newDate <- strptime("20160301", format)

n.times <- ceiling(difftime(dataset$DATE, newDate, units = "days")/30)
dataset[rep(seq_len(nrow(dataset)), n.times), ]

将导致以下结果:

    STATE COUNT       DATE
     LA    20 2016-04-01
     LA    20 2016-04-01
     ME    83 2016-06-01
     ME    83 2016-06-01
     ME    83 2016-06-01
     ME    83 2016-06-01
     MD     4 2016-07-01
     MD     4 2016-07-01
     MD     4 2016-07-01
     MD     4 2016-07-01
     MD     4 2016-07-01