r语言 - 按因子水平的出现顺序,将因子的每次重复标记为新列中的相同数字



我有一个数据框,其中包含一个因子列"class",其中重复了一些因子水平。还有另一个因子列,具有多个级别的"设置"。 我想创建一个新列,从"class"列中添加唯一值的计数,重新启动每个级别的"set"计数,同时保留原始列表中每个"set"值的出现顺序。每次再次出现该因子水平时,此新列只会具有重复的计数值。示例数据如下:

a <- data.frame(c(rep(LETTERS[1:3],2),LETTERS[6:8],LETTERS[1:2]),rep(set_a,11),rep(NA,11))
b <- data.frame(c(LETTERS[11:16],LETTERS[1:3],LETTERS[11:13]), rep(set_b,12),rep(NA,12))
colnames(a) <- c(class,set,count)
colnames(b) <- c(class,set,count)
c <- rbind(a,b)
c$class <- as.factor(c$class)
c$set <- as.factor(c$set)

对于上述数据,我的理想输出如下:

class   set count
A   set_a   1
B   set_a   2
C   set_a   3
A   set_a   1
B   set_a   2
C   set_a   3
F   set_a   4
G   set_a   5
H   set_a   6
A   set_a   1
B   set_a   2
K   set_b   1
L   set_b   2
M   set_b   3
N   set_b   4
O   set_b   5
P   set_b   6
A   set_b   7
B   set_b   8
C   set_b   9
K   set_b   1
L   set_b   2
M   set_b   3

假设您创建的 C 数据框中没有 "count" 列,您可以使用 dplyr 执行以下操作:

makecounter <- c %>% group_by(class, set) %>%
filter(row_number() == 1)%>%
ungroup%>%
group_by(set)%>%mutate(count = seq_along(set))
final <- left_join(c, makecounter, by = c("class","set"))

最新更新