如何在R中基于年龄组与性别两列分组对数值列进行标准化?
按年龄组和性别分组标准化数据的解决办法
嘿,别担心,这确实是个很基础的操作,你离正确答案只差一点点啦!
首先看你写的代码:
df %>% group_by(agegroup, gender) %>% mutate(scaled = scale(values))
这里有个小疏漏:你的数据里列名是value,但代码里写成了values(多了个s),这会导致R找不到对应列,自然分组后的标准化没生效~
正确的代码
修正列名后,这段代码就可以正常按agegroup和gender的组合分组,对value列做标准化了:
library(dplyr) # 修正列名后的代码 df <- df %>% group_by(agegroup, gender) %>% mutate(scaled_value = scale(value)) %>% ungroup() # 可选:如果后续不需要保留分组状态,可以取消分组
验证分组是否生效
你可以用以下代码检查每个分组的标准化结果是否符合预期(标准化后均值为0,方差为1):
df %>% group_by(agegroup, gender) %>% summarise( mean_scaled = mean(scaled_value, na.rm = TRUE), var_scaled = var(scaled_value, na.rm = TRUE) )
运行后你会看到每个分组的mean_scaled接近0,var_scaled接近1,说明分组标准化确实生效了。
手动实现标准化(可选)
如果你想更清楚标准化的过程,也可以手动计算,效果和scale()函数完全一致:
df <- df %>% group_by(agegroup, gender) %>% mutate( scaled_value_manual = (value - mean(value, na.rm = TRUE)) / sd(value, na.rm = TRUE) ) %>% ungroup()
这样就能得到按年龄组和性别分别标准化后的新列啦!
内容的提问来源于stack exchange,提问作者gardenchairs
相关产品推荐
相关产品推荐

