我如何以这种特定方式操作数据?
How can I manipulate data in this specific way?
很抱歉标题含糊不清,但部分问题是我不知道用什么行话来描述我在这里要做的事情。
我有这样的数据:
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 在第一个 table 中有一个日期 20160401,所以它在第二个 table 中有 2 行,因为三月和四月在我选择的日期 20160301 当天或之后.
同样,ME 在第一个 table 中的日期为 201601,因此在第二个 table 中有 4 行,因为三月、四月、五月和六月是在或之后我选的日期是20160301.
我的问题是是否有人可以让我开始了解如何在 R 中实现这种类型的数据操作。
如果将 "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
很抱歉标题含糊不清,但部分问题是我不知道用什么行话来描述我在这里要做的事情。
我有这样的数据:
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 在第一个 table 中有一个日期 20160401,所以它在第二个 table 中有 2 行,因为三月和四月在我选择的日期 20160301 当天或之后.
同样,ME 在第一个 table 中的日期为 201601,因此在第二个 table 中有 4 行,因为三月、四月、五月和六月是在或之后我选的日期是20160301.
我的问题是是否有人可以让我开始了解如何在 R 中实现这种类型的数据操作。
如果将 "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