我需要将增量值提供给范围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中实现这一目标?
答案 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))