Как стандартизировать значения в столбце на основе группировки по двум другим столбцам в R?

Я уверен, что это действительно простая вещь, но я очень новичок в R.

У меня есть три столбца: один со стандартизированными значениями, один с возрастными группами и один с полом. Мне нужен новый столбец, в котором стандартизация проводится по возрастным группам и полу, например, у 18-28-летних женщин баллы отличаются от 18-28-летних мужчин.

р функция защиты (foo): печать (фу)


       agegroup gender value
1      68-90      M           0.55140187
2      38-48      M           0.93333333
3      18-28      F           0.43283582
4       0-18      F           0.00001000
5       0-18      M           0.00001000
6      28-38      F           0.04081633
7      18-28      F           0.37837838
8      28-38      M           0.57142857
9      28-38      F           0.34183673
10     18-28      F           0.37804878
11     28-38      M           0.53571429
12      0-18      M           0.00001000

Я пробовал использовать dplyr

df %>% group_by(agegroup, gender) %>% mutate(scaled = scale(values))

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

Извините, если это действительно просто или плохо объяснено, поскольку я сказал, что я очень новичок в этом. Спасибо за любую помощь!

не могли бы вы немного объяснить свой набор данных и какие переменные вы хотите использовать?

Leevo 30.05.2019 10:48

Попробуйте df %>% dplyr::group_by(agegroup, gender) %>% mutate(scaled = scale(values))

A. Suliman 30.05.2019 10:49

Я не могу воспроизвести какую-либо проблему с моими собственными синтетическими данными. Используя ваш код, я смог без проблем масштабировать на основе gender и agegroup. Я проверил результат, сначала отфильтровав фрейм данных по gender и agegroup, а затем масштабируя, и результаты были такими же. Возможно, вы неправильно поняли вывод?

user10191355 30.05.2019 11:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
339
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы сделали, кажется правильным. Вы не можете использовать summarise(), так как он возвращает одно значение, а не вектор.

Из вашего вопроса я не уверен, хотите ли вы масштабировать значение для каждой группы или найти сумму значений для каждой группы. Я пробовал оба случая.

# Sample data
  age sex values
1 <10   M      1
2 <10   M      2
3 >10   F      3
4 >10   F      4
5 >10   M      5

# Scaling value
df %>% group_by(age, sex) %>% mutate(std_value = scale(values))
  age   sex   values std_value
  <fct> <fct>  <dbl>     <dbl>
1 <10   M          1    -0.707
2 <10   M          2     0.707
3 >10   F          3    -0.707
4 >10   F          4     0.707
5 >10   M          5   NaN

# Sum of values
df %>% group_by(age, sex) %>% mutate(sum_value = sum(values))
  age   sex   values sum_value
  <fct> <fct>  <dbl>     <dbl>
1 <10   M          1         3
2 <10   M          2         3
3 >10   F          3         7
4 >10   F          4         7
5 >10   M          5         5

Другие вопросы по теме