Помечать каждое повторение фактора одним и тем же числом в новом столбце в порядке появления на уровнях фактора - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть фрейм данных со столбцом фактора "класс", в котором некоторые уровни фактора повторяются.Есть еще один столбец факторов, «набор» с несколькими уровнями.Я хотел бы создать новый столбец, который добавляет количество уникальных значений из столбца «класс», перезапуская счет для каждого уровня «набора», сохраняя при этом порядок вхождения из исходного списка для каждого значения «набора»,Этот новый столбец будет иметь повторяющиеся значения счетчика каждый раз, когда уровень фактора повторяется снова.Пример данных ниже:

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

1 Ответ

0 голосов
/ 11 сентября 2018

при условии, что вы создали фрейм данных 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"))
...