r - 在 R 中索引客户交易

标签 r indexing dataframe

我想在 R 数据框中索引客户交易,以便我可以轻松识别特定客户进行的第三笔交易。例如,如果我有以下数据框(按客户和交易日期排序):

transactions = data.frame(CUST.ID = c(1, 1, 2, 2, 2, 2, 3, 3, 3), 
DATE = as.Date(c("2009-07-02", "2013-08-15", "2010-01-02", "2004-03-05", 
"2006-02-03", "2007-01-01", "2004-03-05", "2006-02-03", "2007-01-01")),
AMOUNT = c(5, 9, 21, 34, 76, 1, 100, 23, 10))



> transactions
  CUST.ID       DATE AMOUNT
1       1 2009-07-02      5
2       1 2013-08-15      9
3       2 2010-01-02     21
4       2 2004-03-05     34
5       2 2006-02-03     76
6       2 2007-01-01      1
7       3 2004-03-05    100
8       3 2006-02-03     23
9       3 2007-01-01     10

我可以清楚地看到客户 1 进行了 2 笔交易,客户 2 进行了 4 笔交易,等等。

我想要的是按客户索引这些交易,在我的数据框中创建一个新列。下面的代码实现了我想要的:

transactions$COUNTER = 1
transactions$CUSTOMER.TRANS.NO = unlist(aggregate(COUNTER ~ CUST.ID, 
data = transactions, 
function(x) {rank(x, ties.method = "first")})[, 2])
transactions$COUNTER = NULL


> transactions
  CUST.ID       DATE AMOUNT CUSTOMER.TRANS.NO
1       1 2009-07-02      5                 1
2       1 2013-08-15      9                 2
3       2 2010-01-02     21                 1
4       2 2004-03-05     34                 2
5       2 2006-02-03     76                 3
6       2 2007-01-01      1                 4
7       3 2004-03-05    100                 1
8       3 2006-02-03     23                 2
9       3 2007-01-01     10                 3

现在,每个客户的第一笔交易标记为 1,第二笔交易标记为 2,依此类推。

所以我已经得到了我想要的东西,但是这是一段非常糟糕的代码,创建一个列表并分隔,它太丑陋了。有比我更有经验的人能够提出更好的解决方案吗?

最佳答案

因为您已经努力发布了您尝试过的示例代码(使您的问题成为比我链接到的重复问题更好的 Stack Overflow 问题),所以我将在此处总结这些选项:

within(transactions, { Trans.No <- ave(CUST.ID, CUST.ID, FUN = seq_along) })

getanID

library(splitstackshape)
getanID(transactions, "CUST.ID")

rle

## Depends on your data being sorted
transactions$Trans.No <- sequence(rle(transactions$CUST.ID)$lengths)

数据表

library(data.table)
DT <- data.table(transactions)
DT[, .id := sequence(.N), by = "CUST.ID"]

关于r - 在 R 中索引客户交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18537870/

相关文章:

r - 按年和月对年月列进行排序

r - 如何在 R 中重新排列具有数千行的列

r - R today()中的错误:找不到函数 “today”

MySQL INDEX 当前数据库表

Pandas:插入缺失的行数据并在组内使用条件进行迭代

Python 数据帧 : Count how many of occurrences of value on specific date and delete based on condition

r - 如何将 r 数据框转换为 h2o 对象

r - 将 <U+0161> 等 utf8 代码点字符串转换为 utf8

javascript - 如何使用 $index 设置 angular ui bootstrap calendar is-open 属性?

javascript - 如何使用indexOf在数组中查找函数