这个问题在这里已经有了答案:
Numbering rows within groups in a data frame
(9 个回答)
5年前关闭。
我的数据如下所示:
CustomerID TripDate
1 1/3/2013
1 1/4/2013
1 1/9/2013
2 2/1/2013
2 2/4/2013
3 1/2/2013
我需要创建一个计数器变量,如下所示:
CustomerID TripDate TripCounter
1 1/3/2013 1
1 1/4/2013 2
1 1/9/2013 3
2 2/1/2013 1
2 2/4/2013 2
3 1/2/2013 1
Tripcounter
将是为每个客户。
最佳答案
使用 ave
.假设您的 data.frame
被称为“mydf”:
mydf$counter <- with(mydf, ave(CustomerID, CustomerID, FUN = seq_along))
mydf
# CustomerID TripDate counter
# 1 1 1/3/2013 1
# 2 1 1/4/2013 2
# 3 1 1/9/2013 3
# 4 2 2/1/2013 1
# 5 2 2/4/2013 2
# 6 3 1/2/2013 1
对于它的值(value),我还在“splitstackshape”包中包含的函数中实现了这种方法的一个版本。该函数名为
getanID
:mydf <- data.frame(IDA = c("a", "a", "a", "b", "b", "b", "b"),
IDB = c(1, 2, 1, 1, 2, 2, 2), values = 1:7)
mydf
# install.packages("splitstackshape")
library(splitstackshape)
# getanID(mydf, id.vars = c("IDA", "IDB"))
getanID(mydf, id.vars = 1:2)
# IDA IDB values .id
# 1 a 1 1 1
# 2 a 2 2 1
# 3 a 1 3 2
# 4 b 1 4 1
# 5 b 2 5 1
# 6 b 2 6 2
# 7 b 2 7 3
正如您从上面的示例中看到的那样,我以这样一种方式编写了该函数,您可以指定一个或多个应被视为 ID 列的列。它检查是否有任何
id.vars
是重复的,如果是,那么它会为您生成一个新的 ID 变量。
关于r - 创建具有多个变量的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18487109/