如何唯一索引列?

时间:2017-08-31 07:34:04

标签: r

试图找到一个类似的帖子,但不能。

我在数据表中有一列如下所示 - >

x,x,x,x,y,y,y,c,c,c

我想在一个单独的列中编制索引,以便 - >

1,1,1,1,2,2,2,3,3,3

怎么做?

3 个答案:

答案 0 :(得分:2)

我会选择这个,它具有处理数据帧和数据表的优势,(也许是元数据,idk)。索引号是从col代码的第一次出现获得的,输出索引号不依赖于相邻行的col代码(因此如果colx,x,x,x,y,y,y,x,x,x全部x获取索引2)。

> dt <- data.table(col = c("x", "x", "x", "x", "y", "y", "y", "c", "c", "c")) 
> dt$index = as.numeric(factor(dt$col,levels=unique(dt$col)))
> dt
    col index
 1:   x     1
 2:   x     1
 3:   x     1
 4:   x     1
 5:   y     2
 6:   y     2
 7:   y     2
 8:   c     3
 9:   c     3
10:   c     3

答案 1 :(得分:1)

data.table 的解决方案:

library(data.table)
dt <- data.table(col = c("x", "x", "x", "x", "y", "y", "y", "c", "c", "c")) 

dt[ , idx := .GRP, by = col]
#     col idx
#  1:   x   1
#  2:   x   1
#  3:   x   1
#  4:   x   1
#  5:   y   2
#  6:   y   2
#  7:   y   2
#  8:   c   3
#  9:   c   3
# 10:   c   3

base R 的解决方案:

dat <- data.frame(col = c("x", "x", "x", "x", "y", "y", "y", "c", "c", "c")) 

dat <- transform(dat, idx = match(col, unique(col)))
#    col idx
# 1    x   1
# 2    x   1
# 3    x   1
# 4    x   1
# 5    y   2
# 6    y   2
# 7    y   2
# 8    c   3
# 9    c   3
# 10   c   3

答案 2 :(得分:0)

dt$index <- cumsum(!duplicated(dt$a))
dt
a index
# 1  x     1
# 2  x     1
# 3  x     1
# 4  x     1
# 5  y     2
# 6  y     2
# 7  y     2
# 8  c     3
# 9  c     3
# 10 c     3