【问题标题】:How to standardize values in a column based on grouping by two other columns in R?如何根据 R 中的其他两列分组来标准化列中的值?
【发布时间】:2019-10-15 21:23:38
【问题描述】:

我确信这是一件非常简单的事情,但我对 R 很陌生。

我有三列,一列包含我需要标准化的值,一列包含年龄组,另一列包含性别。我想要一个新列,其中按年龄组和性别进行标准化,例如 18-28 岁的女性与 18-28 岁的男性的分数不同。

R 定义函数(foo): 打印(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))

分组不是按性别和年龄组进行的。我想我必须使用summary,但我不确定如何使用。

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

【问题讨论】:

  • 能否请您解释一下您的数据集,以及您要如何使用的变量?
  • 试试df %>% dplyr::group_by(agegroup, gender) %>% mutate(scaled = scale(values))
  • 我无法用我自己的合成数据复制任何问题。使用您的代码,我能够毫无障碍地基于genderagegroup 进行扩展。我首先通过genderagegroup过滤数据帧然后缩放来检查结果,结果是一样的。您可能误解了输出吗?

标签: r dplyr


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2022-07-05
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2020-02-08
    相关资源
    最近更新 更多