【问题标题】:Count unique values in R and display in column计算 R 中的唯一值并显示在列中
【发布时间】:2017-01-25 11:53:02
【问题描述】:

我有这个数据框,我想计算 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

【问题讨论】:

  • A 是否已排序?

标签: r dataframe unique


【解决方案1】:
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))

【讨论】:

  • 我不需要!@akrun
【解决方案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)])))

【讨论】:

    【解决方案3】:

    我们可以使用base 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-19
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多