插入" count.if" R中data.frame中的列

时间:2017-03-18 14:01:56

标签: r count

我想在data.frame中插入一个新列,用于计算客户端到目前为止出现的次数。但是,我希望每次增加1。因此,第一次购买客户A是1,第二次是2 ...

在Excel中,您将继续使用count.if函数。

我已尝试过这两个功能,但前十个是零。

customer <- as.factor(sample(c("A","B","C","D"), 50, replace = TRUE, prob = c(10,20,30,40)))
purchase <- round(runif(50, 50,150),0)
purch_id <- 1:50
my_store <- data.frame(customer,purchase, purch_id)
my_store$number1 <- apply(my_store, 1, function(x)length(which(my_store$customer==x[1] & my_store$purch_id<x[3])))
my_store$number2 <- apply(my_store, 1, function(x)sum((my_store$customer==x[1] & my_store$purch_id<x[3])))
my_store

第一列是客户端,第二列是他花了多少钱,第三列是每次购买的唯一ID。而且每一行都是一个独特的购买二。

谢谢!

1 个答案:

答案 0 :(得分:0)

这有效......

my_store$number3 <- sapply(1:nrow(my_store),function(i) sum(my_store$customer==my_store$customer[i] & my_store$purch_id<=my_store$purch_id[i]))

> my_store
   customer purchase purch_id number1 number2 number3
1         B      100        1       0       0       1
2         C      120        2       0       0       1
3         D       57        3       0       0       1
4         C       98        4       0       0       2
5         C       92        5       0       0       3
6         C      127        6       0       0       4
7         B      136        7       0       0       2
8         C       87        8       0       0       5
9         D       56        9       0       0       2
10        B      114       10       1       1       3
11        B      128       11       2       2       4
12        B      142       12       3       3       5
13        B       76       13       4       4       6
14        C      138       14       0       0       6
15        B       71       15       5       5       7
16...