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