我有这个数据框,我想计算A列中的唯一值并在D列中显示它们
因此if else函数应该查看每个新唯一用户的列A和广告1
> DF_Have <- data.frame(A=c(1,2,2,3,3), B=1:5*10, C=1:5*100)
> DF_Have
A B C
1: 1 10 100
2: 2 20 200
3: 2 30 300
4: 3 40 400
5: 3 50 500
> DF_Want
A B C D
1: 1 10 100 1
2: 2 20 200 2
3: 2 30 300 2
4: 3 40 400 3
5: 3 50 500 3
答案 0 :(得分:3)
library(data.table)
DF_Have$D <- rleid(DF_Have$A)
DF_Have
# A B C D
#1 1 10 100 1
#2 2 20 200 2
#3 2 30 300 2
#4 3 40 400 3
#5 3 50 500 3
不需要任何外部包的另一个选项是(提供DF_Have$A
订购)
DF_Have$D <- cumsum(!duplicated(DF_Have$A))
答案 1 :(得分:2)
也许这有帮助
library(data.table)
setDT(DF_Have)[, D:= rleid(A)]
DF_Have
# A B C D
#1: 1 10 100 1
#2: 2 20 200 2
#3: 2 30 300 2
#4: 3 40 400 3
#5: 3 50 500 3
或使用dplyr
library(dplyr)
DF_Have %>%
mutate(D = cumsum(c(TRUE, A[-1]!= A[-length(A)])))
答案 2 :(得分:2)
我们可以使用基础R match
DF_Have$D <- match(DF_Have$A, unique(DF_Have$A))
DF_Have
# A B C D
#1 1 10 100 1
#2 2 20 200 2
#3 2 30 300 2
#4 3 40 400 3
#5 3 50 500 3