Я пытаюсь преобразовать фрейм данных, состоящий из категориальных и числовых столбцов, в фрейм данных, где каждое значение представляет относительную частоту в столбце. Мне нужно гибко масштабировать, поэтому использование имен столбцов, перечисленных в кадре данных, с которым я тренируюсь, не работает для моих целей.
В качестве примера игрушек, пожалуйста, рассмотрите этот фрейм данных:
df<-data.frame(fruit=c('apple','apple','pear','orange','apple','pear'),
price=c(47,92,87,14,21,19),
town=c('home','far','close','close','close','far'))
В качестве цели данных я надеюсь получить результат:
goal<-data.frame(fruit=c(.50,.50,.33,.17,.5,.17),
price=c(.01,1.29,1.14,-0.93,-0.73,-0.79),
town=c(.17,.33,.50,.50,.50,.33))
В кадре данных цели я надеюсь масштабировать числовые столбцы, а столбцы с категориальными значениями преобразовывать в относительную частоту значения в столбце. Например, «яблоко» появляется для трех из шести записей в кадре данных, и поэтому .50 отражает 3/6 в столбце.
Я могу преобразовать переменную price
и все числовые столбцы в моем фрейме данных в z-счет, используя:
newdf <- df %>%
mutate_if(is.numeric,scale)
Это завершает мою цель для числовых столбцов, так как масштабированное значение более интересно для меня, чем число раз, когда появляется значение в непрерывном масштабе (большинство наборов, на которых я буду использовать это, имеют тонны десятичных знаков, и точных повторов там нет).
Я попытался использовать некоторые небольшие правки в коде, который нашел в этом ответе: dplyr: применить функцию table () к каждому столбцу data.frame , но я не смог достичь своей цели. Как я мог достичь желаемого результата?
Заранее спасибо!