如何根据另一列的值创建订单号?

时间:2016-08-05 23:08:59

标签: r dplyr

我试图根据dateAndCheckNumber列的值创建订单号(1,2,3 ......等)。每个唯一的dateAndCheckNumber都应该有自己的订单号。下面的代码有效,但需要很长时间,因为它是一个for循环。我需要使用更大的数据集重新创建这个过程,并且我正在寻找更有效运行的东西。我尝试将mutatedplyr包一起使用,但我无法弄清楚如何让计数器工作。

dataset <- dataset[order(dataset$dateAndCheckNumber),]
for(i in 1:nrow(dataset)){
if(i==1){
  dataset$orderNumber[1] <-1
  count <- 1
}
else{
  if(dataset$dateAndCheckNumber[i]==(dataset$dateAndCheckNumber)[i-1]){
    dataset$dateAndCheckNumber[i] <- count
  } else {
    count <- count+1
    dataset$dateAndCheckNumber[i] <- count
  }
}

}

2 个答案:

答案 0 :(得分:1)

在基础R中,实现此目的的最简单,最快捷的方法可能是as.integer(as.factor())

以下是@dayne回答数据的示例:

set.seed(1234)
id <- sample(LETTERS[1:6],6,replace=TRUE)
df1 <- data.frame(id, counter=as.integer(as.factor(id)))
#> df1
#  id counter
#1  A       1
#2  D       2
#3  D       2
#4  D       2
#5  F       3
#6  D       2

答案 1 :(得分:0)

使用data.table包,您可以使用.GRP变量创建具有唯一组号的列:

library(data.table)
set.seed(1234)
DT <- data.table(id = sample(LETTERS[1:6], 6, replace = TRUE))
DT[ , counter := .GRP, by = id]
DT
#    id counter
# 1:  A       1
# 2:  D       2
# 3:  D       2
# 4:  D       2
# 5:  F       3
# 6:  D       2