我在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
任何帮助都会受到高度赞赏..
答案 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))