我正在尝试按项目标准化强度代码
例如。
ID Item StrengthCode
7 A 1
7 A 5
7 A 7
8 B 1
8 B 3
9 A 5
9 A 3
我需要实现的是这样的:
ID Item StrengthCode Nor
7 A 1 0.14
7 A 5 0.71
7 A 7 1
8 B 1 0.34
8 B 3 1
9 A 5 0.71
9 A 3 0.42
我试过这段代码,但我被卡住了......如果你能帮助我会很棒!!!
normalit <- function(m){(m - min(m))/(max(m)-min(m))}
Tbl.Test <- Tbl.3.1 %>%
group_by(ID, Item) %>%
mutate(Nor = normalit(StregthCode))
我收到此错误:
最佳答案
您想要的输出看起来像您想要的:
df <- read.table(header=TRUE, text=
'ID Item StrengthCode
7 A 1
7 A 5
7 A 7
8 B 1
8 B 3
9 A 5
9 A 3')
df$Nor <- ave(df$StrengthCode, df$Item, FUN=function(x) x/max(x))
df
# > df
# ID Item StrengthCode Nor
# 1 7 A 1 0.1428571
# 2 7 A 5 0.7142857
# 3 7 A 7 1.0000000
# 4 8 B 1 0.3333333
# 5 8 B 3 1.0000000
# 6 9 A 5 0.7142857
# 7 9 A 3 0.4285714
使用
dplyr
你可以做(感谢 Sotos 的评论+代码):library("dplyr")
(df %>% group_by(Item) %>% mutate(Nor = StrengthCode/max(StrengthCode)))
# > (df %>% group_by(Item) %>% mutate(Nor = StrengthCode/max(StrengthCode)))
# Source: local data frame [7 x 4]
# Groups: Item [2]
#
# ID Item StrengthCode Nor
# <int> <fctr> <int> <dbl>
# 1 7 A 1 0.1428571
# 2 7 A 5 0.7142857
# 3 7 A 7 1.0000000
# 4 8 B 1 0.3333333
# 5 8 B 3 1.0000000
# 6 9 A 5 0.7142857
# 7 9 A 3 0.4285714
关于r - 按组标准化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43680246/