Я уверен, что это действительно простая вещь, но я очень новичок в 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))
Группировка происходит не по полу, а по возрастным группам. Я думаю, что мне нужно использовать обобщение, но я не уверен, как это сделать.
Извините, если это действительно просто или плохо объяснено, поскольку я сказал, что я очень новичок в этом. Спасибо за любую помощь!
Попробуйте df %>% dplyr::group_by(agegroup, gender) %>% mutate(scaled = scale(values))
Я не могу воспроизвести какую-либо проблему с моими собственными синтетическими данными. Используя ваш код, я смог без проблем масштабировать на основе gender
и agegroup
. Я проверил результат, сначала отфильтровав фрейм данных по gender
и agegroup
, а затем масштабируя, и результаты были такими же. Возможно, вы неправильно поняли вывод?
То, что вы сделали, кажется правильным. Вы не можете использовать 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
не могли бы вы немного объяснить свой набор данных и какие переменные вы хотите использовать?