Как переименовать наблюдения по частоте в R? - PullRequest
0 голосов
/ 12 июля 2020

В моем фрейме данных я пытаюсь переименовать определенные наблюдения в столбце «Имя» в зависимости от их соответствующей частоты. То есть я хочу переименовать наблюдения с Частотой имени ниже 100. Если какое-либо имя встречается в наборе данных менее 100 раз, я хочу переименовать все эти наблюдения в «Базовые» в столбце «Имя». Вот пример:

Game   Home Runs     Name 

1          2        Hank Aaron
2          3        Babe Ruth
3          1        Ted Williams
3          4        Hank Aaron
4          2        Ted Williams
...

Если бы имена Теда Уильямса и Бейб Рут появлялись во фрейме данных не более 100 раз, их имена были бы заменены на «Base» для всех значений столбца Name.

Game   Home Runs     Name 

1          2        Hank Aaron
2          3        Base
3          1        Base
3          4        Hank Aaron
4          2        Base
...

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

Извините, если я слишком много объяснил. Просто немного потерялся

Ответы [ 2 ]

1 голос
/ 12 июля 2020
library(forcats)

df %>%

   mutate(Name = fct_lump(Name, n = 100, other_level = "Base")) 
0 голосов
/ 12 июля 2020

Вы можете использовать table для подсчета количества раз, когда каждое Name встречается в фрейме данных, используя Filter, сохраните только те имена, которые встречаются менее 100 раз, сопоставьте их в исходном фрейме данных, используя %in% и замените .

df$Name[df$Name %in% names(Filter(I, table(df$Name) < 100))] <- 'Base'
...