2015-04-03 67 views
2

比方說,我有這樣的矩陣:如何矩陣根據另一列更改列

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條目劃分值。 我知道這樣做的蠻力,但你會以一種優雅的方式幫助我嗎?

回答

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))) 
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