我的数据如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我需要创建一个计数器变量,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
Tripcounter 将为每个客户.
A5C*_*2T1 13
使用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
Run Code Online (Sandbox Code Playgroud)
为了它的价值,我还在我的"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
Run Code Online (Sandbox Code Playgroud)
从上面的示例中可以看出,我以这样的方式编写函数,您可以指定一个或多个应被视为ID列的列.它检查是否有任何id.vars重复,如果是,那么它会为您生成一个新的ID变量.
你也可以使用plyr它(使用@ AnadaMahto的示例数据):
> ddply(mydf, .(IDA), transform, .id = seq_along(IDA))
IDA IDB values .id
1 a 1 1 1
2 a 2 2 2
3 a 1 3 3
4 b 1 4 1
5 b 2 5 2
6 b 2 6 3
7 b 2 7 4
Run Code Online (Sandbox Code Playgroud)
甚至:
> ddply(mydf, .(IDA, IDB), transform, .id = seq_along(IDA))
IDA IDB values .id
1 a 1 1 1
2 a 1 3 2
3 a 2 2 1
4 b 1 4 1
5 b 2 5 1
6 b 2 6 2
7 b 2 7 3
Run Code Online (Sandbox Code Playgroud)
请注意,plyr作为最快的解决方案并不具备声誉,因为您需要了解一下data.table.
这是一种data.table方法:
library(data.table)
DT <- data.table(mydf)
DT[, .id := sequence(.N), by = "IDA,IDB"]
DT
# 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
Run Code Online (Sandbox Code Playgroud)
同时,你也可以使用dplyr.如果你的data.frame被称为mydata
library(dplyr)
mydata %>% group_by(CustomerID) %>% mutate(TripCounter = row_number())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4632 次 |
| 最近记录: |