我确定这是一件非常简单的事情,但是我对R还是很陌生。
我有三列,一列有我需要标准化的价值观,一列有年龄组,一列有性别。我想要一个新的栏目,其中按年龄段和性别进行标准化,例如18-28岁的女性得分与18-28岁的男性不同。
R def函数(foo): print(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))
该分组未按性别和年龄段进行。我想我必须使用摘要,但是我不确定该怎么做。
很抱歉,如果这真的很简单或没有得到很好的解释,我说我对此很陌生。感谢您的帮助!
答案 0 :(得分:0)
您所做的事情似乎是正确的。您不能使用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