R/tidyverse: calculating standard deviation across rows

后端 未结 6 1094
情深已故
情深已故 2020-12-19 05:53

Say I have the following data:

colA <- c(\"SampA\", \"SampB\", \"SampC\")
colB <- c(21, 20, 30)
colC <- c(15, 14, 12)
colD <- c(10, 22, 18)
df &l         


        
6条回答
  •  眼角桃花
    2020-12-19 06:45

    You can use pmap, or rowwise (or group by colA) along with mutate :

    library(tidyverse)
    df %>% mutate(sd = pmap(.[-1], ~sd(c(...)))) # same as transform(df, sd = apply(df[-1],1,sd))
    #>    colA colB colC colD       sd
    #> 1 SampA   21   15   10 5.507571
    #> 2 SampB   20   14   22 4.163332
    #> 3 SampC   30   12   18 9.165151
    
    df %>% rowwise() %>% mutate(sd = sd(c(colB,colC,colD)))
    #> Source: local data frame [3 x 5]
    #> Groups: 
    #> 
    #> # A tibble: 3 x 5
    #>   colA   colB  colC  colD    sd
    #>       
    #> 1 SampA    21    15    10  5.51
    #> 2 SampB    20    14    22  4.16
    #> 3 SampC    30    12    18  9.17
    
    df %>% group_by(colA) %>% mutate(sd = sd(c(colB,colC,colD)))
    #> # A tibble: 3 x 5
    #> # Groups:   colA [3]
    #>   colA   colB  colC  colD    sd
    #>       
    #> 1 SampA    21    15    10  5.51
    #> 2 SampB    20    14    22  4.16
    #> 3 SampC    30    12    18  9.17
    

提交回复
热议问题