首页 > 解决方案 > 分别标准化每个唯一组的值

问题描述

数据集“df”包含以下两个变量:

SessionID   TotalMark
14  50
14  5
14  54
14  55
17  96
17  63
17  78
17  25
17  98

现在我想分别为每组 SessionID 标准化 TotalMark,以便按(SessionID)分组并将这些标准化分数放入新变量 StandTotalMark。这是期望的结果:

SessionID   TotalMark   StandTotalMark
14  50  0.373490072
14  5   -1.493960286
14  54  0.539485659
14  55  0.580984556
17  96  0.8024557
17  63  -0.3009209
17  78  0.2006139
17  25  -1.5714758
17  98  0.8693270

我确实达到了预期的结果,但我想知道是否有人可以在 R 中提出一个优雅的单行解决方案而无需使用 for 循环?我使用 scale 函数来标准化 TotalMark

标签: rgroup-byscale

解决方案


你可以很容易地做到这一点dplyr

library(dplyr)
dd %>% 
  group_by(SessionID) %>% 
  mutate(StandTotalMark=scale(TotalMark))

dd <- read.table(text="SessionID   TotalMark
14  50
14  5
14  54
14  55
17  96
17  63
17  78
17  25
17  98", header=TRUE)

推荐阅读