我们说我有这样的矩阵:
Property Group Numb
1 rule panic 13
2 rule calm 70
3 mild panic 21
4 mild calm 59
5 chaos panic 46
6 chaos calm 43
我想更改第三列:每个值除以此列中的数字总和与相应的组。
例如,第一行应该是这样的:
1 rule panic 13/(13+21+46
)
对于Numbs
的条目,我们将值除以Group = panic
的总和。
我知道做这件事的蛮力,但你会以优雅的方式帮助我吗?
答案 0 :(得分:4)
尝试
library(dplyr)
df1 %>%
group_by(Group) %>%
mutate(Numb = Numb/sum(Numb))
或者
library(data.table)
setDT(df1)[, Numb1:= Numb/sum(Numb) , Group][]
或使用base R
df1$Numb <- with(df1, ave(Numb, Group, FUN=function(x) x/sum(x)))
答案 1 :(得分:3)
你也可以尝试这个
df <- read.table(header=T, text="
Property Group Numb
1 rule panic 13
2 rule calm 70
3 mild panic 21
4 mild calm 59
5 chaos panic 46
6 chaos calm 43")
df$Numb/ave(df$Numb, df$Group, FUN="sum")
# [1] 0.1625000 0.4069767 0.2625000 0.3430233 0.5750000 0.2500000