R将增量值提供给范围最小 - 最大日期,分组依据

时间:2016-10-11 10:59:20

标签: r database shiny

我需要将增量值提供给范围min-max (日期),分组。

我有这个样本数据(有2个不同的ISBN):

ISBN  Date
67898 2013-04-01
67898 2013-05-07
67898 2014-11-21
98756 2012-02-18
98756 2014-11-07
98756 2014-11-21

这是我需要的结果:

ISBN  Date       IncrValue
67898 2013-04-01    1
67898 2013-05-07    2
67898 2014-11-21    3
98756 2012-02-18    1
98756 2014-11-07    2
98756 2014-11-21    3

如何在R中实现这一目标?

2 个答案:

答案 0 :(得分:0)

正如@StevenBeaupré所示,您可以使用dplyr包进行操作。这是使用基础包的另一种解决方案。

# Create a toy data dataset
df <- data.frame(ISBN = rep(c(123, 456), each = 5), Date = seq(as.Date("2000-01-01"), as.Date("2013-01-01"), length.out = 10))

# dplyr solution
library(dplyr)
df %>%
group_by(ISBN) %>%
mutate(IncrValue = row_number())

# Base solution
listed <- split(df, df$ISBN) # split the data frame by the ISBN variable
newcol <- lapply(listed, function(x) {x$IncrValue <- 1:nrow(x); x}) # create a sequence column within each group
df2 <- unsplit(newcol, df$ISBN) # unsplit back together.

答案 1 :(得分:0)

base R:

中试试
df$IncrValue <- as.vector(t(aggregate(Date~ISBN, df, order)[,-1]))

数据

df <- structure(list(ISBN = c(67898L, 67898L, 67898L, 98756L, 98756L, 
98756L), Date = structure(c(15796, 15832, 16395, 15388, 16381, 
16395), class = "Date")), .Names = c("ISBN", "Date"), class = "data.frame", row.names = c(NA, 
-6L))