为R中的每个实例分配唯一ID

时间:2015-12-15 06:56:13

标签: r

我在R中有一个数据帧df,如下所示:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

我想要一个新的数据框,为每个实例分配唯一的ID,如下所示:

>df
#x
#a
#b
#a
#c
#b

任何帮助都会受到高度赞赏..

2 个答案:

答案 0 :(得分:1)

我们可以使用ave并将FUN指定为seq_along,按“x”列分组。

df$y <- with(df, ave(x, x, FUN=seq_along))
df
#  x y
#1 a 1
#2 b 1
#3 a 2
#4 c 1
#5 b 2

或使用getanID

中的splitstackshape
library(splitstackshape)
getanID(df, 'x')[]

或使用data.table

library(data.table)
setDT(df)[, y:= seq_len(.N), by =x]

数据

df <- structure(list(x = c("a", "b", "a", "c", "b")), 
.Names = "x", row.names = c(NA, -5L), class = "data.frame")

答案 1 :(得分:1)

library(dplyr)
df <- data.frame(x=c("a", "b", "a", "c", "b"))

df %>% group_by(x) %>% mutate(y=1:length(x))
# Source: local data frame [5 x 2]
# Groups: x [3]

#       x     y
#   (fctr) (int)
# 1      a     1
# 2      b     1
# 3      a     2
# 4      c     1
# 5      b     2

row_number中使用dplyr

df %>% group_by(x) %>% mutate(y=row_number(x))