如何根据R中另外两个列的分组来标准化列中的值?

时间:2019-05-30 08:34:19

标签: r dplyr

我确定这是一件非常简单的事情,但是我对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))

该分组未按性别和年龄段进行。我想我必须使用摘要,但是我不确定该怎么做。

很抱歉,如果这真的很简单或没有得到很好的解释,我说我对此很陌生。感谢您的帮助!

1 个答案:

答案 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