【问题标题】:How to change column in matrix according to another column如何根据另一列更改矩阵中的列
【发布时间】:2015-04-03 15:49:28
【问题描述】:

假设我有这样的矩阵:

   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)

对于带有Group = panic 的条目,我们将该值除以Numbs 的总和。 我知道这样做的蛮力,但你能帮我用一种优雅的方式来做吗?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    试试

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

    【讨论】:

      【解决方案2】:

      你也可以试试这个

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多