2015-04-03 37 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