Добавить переменную для группировки данных по уникальным комбинациям переменных - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть кадр данных, подобный следующему:

df <- data.frame(cbind((c(2018,2018,2018,2018,2018,2017,2017,2016)), 
        (c('Ohio','Ohio','Arizona','Arizona','Nebraska','Nebraska','New Mexico','Idaho')), 
        (c('A','B','C','D','E','F','G','H')), (c(1,2,3,4,5,6,7,8))))
colnames(df) <- c('Date', 'Location', 'Var1', 'Var2')


      Date   Location     Var1 Var2
      2018   Ohio         A    1 
      2018   Ohio         B    2 
      2018   Arizona      C    3 
      2018   Arizona      D    4 
      2018   Nebraska     E    5 
      2017   Nebraska     F    6 
      2017   New Mexico   G    7 
      2016   Idaho        H    8 

И я пытаюсь ввести новую переменную 'Combo', которая будет представлять каждую уникальную комбинацию переменных 'Date' и 'Location', напримерчто любой ряд наблюдений с одинаковыми датой и местоположением будет иметь одинаковое «комбинированное» значение.Я надеюсь, что это будет выглядеть примерно так:

      Date   Location     Var1 Var2  Combo
      2018   Ohio         A    1     1
      2018   Ohio         B    2     1
      2018   Arizona      C    3     2
      2018   Arizona      D    4     2
      2018   Nebraska     E    5     3
      2017   Nebraska     F    6     4
      2017   New Mexico   G    7     5
      2016   Idaho        H    8     6

Так что каждое комбинированное значение совместно используется всеми строками, которые имеют одинаковую комбинацию даты и местоположения, независимо от других переменных в этой строке.

Я пытался использовать комбинацию mutate() и distinct(), но безуспешно.Я надеюсь на простое решение, которое чем-то похоже на:

У кого-нибудь есть идеи по этому поводу?Я пытался найти в документации для distinct() и unique() идеи, но не повезло.

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Оба параметра

df <- mutate(df,Combo = as.integer(interaction(Date,Location,drop = TRUE)))

и

df <- mutate(df,Combo = as.integer(factor(paste0(Date,Location))))

являются опциями, хотя они упорядочивают уровни не в том порядке, в котором они отображаются в данных.

0 голосов
/ 19 февраля 2019

Мы можем использовать .GRP из data.table после группировки по 'Дата', 'Местоположение'

library(data.table)
setDT(df)[, Combo := .GRP, .(Date, Location)]
df
#   Date   Location Var1 Var2 Combo
#1: 2018       Ohio    A    1     1
#2: 2018       Ohio    B    2     1
#3: 2018    Arizona    C    3     2
#4: 2018    Arizona    D    4     2
#5: 2018   Nebraska    E    5     3
#6: 2017   Nebraska    F    6     4
#7: 2017 New Mexico    G    7     5
#8: 2016      Idaho    H    8     6

Или используя rleid

setDT(df)[, Combo := rleid(Date, Location)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...