Условная переменная фрейма данных, основанная на присутствии в другой строке - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть фрейм данных:

df <- data.frame(Group = c('a', 'a', 'b', 'a', 'b', 'b', 'a', 'b'),
                 ID = c(paste0('x', c('1', '2', '2', '3', '4', '5', '6', '6')))

Я хочу назначить третью переменную, newvar, которая выглядит следующим образом:

df <- data.frame(Group = c('a', 'a', 'b', 'a', 'b', 'b', 'a', 'b'),
                 ID = c(paste0('x', c('1', '2', '2', '3', '4', '5', '6', '6'))),
                 newvar = c('first', 'first', 'second', 'first', 'first', 'first', 'first', 'second'))

Для каждого идентификатора он может появитьсяили один или два раза.Если он появится в группе a, строка, содержащая a, будет назначена первой.Если появится и группы a и b, то a будет назначен «первый», а b будет «второй».Если это только появляется в b и не a, newvar будет назначен 'первым'.Как я могу написать код для назначения newvar как таковой?

1 Ответ

0 голосов
/ 16 ноября 2018

Как насчет этого решения с data.table:

library(data.table)
setDT(df)
df[, newvar := c('first', 'second')[seq_len(.N)], by = .(ID)]
df
   Group ID newvar
1:     a x1  first
2:     a x2  first
3:     b x2 second
4:     a x3  first
5:     b x4  first
6:     b x5  first
7:     a x6  first
8:     b x6 second
...