如何根据另一列更改矩阵中的列

时间:2015-04-03 15:49:28

标签: r matrix

我们说我有这样的矩阵:

   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的总和。 我知道做这件事的蛮力,但你会以优雅的方式帮助我吗?

2 个答案:

答案 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