[R] stdev error

Jeff Reichman re|chm@nj @end|ng |rom @bcg|ob@|@net
Fri Mar 11 18:49:52 CET 2022


Rui

Found my problem, or at least I think I found the problem. 

# BEWARE: reusing variables may lead to unexpected results - https://dplyr.tidyverse.org/reference/summarise.html

I changed my variable name  and problem resolved.

Jeff

-----Original Message-----
From: Rui Barradas <ruipbarradas using sapo.pt> 
Sent: Friday, March 11, 2022 9:24 AM
To: reichmanj using sbcglobal.net; r-help using r-project.org
Subject: Re: [R] stdev error

Hello,

I cannot reproduce this error with a built-in data set.
Can you post str(my_tbl)?


suppressPackageStartupMessages(library(dplyr))

mtcars %>%
   mutate(hp = round(hp * 2) / 2) %>%
   group_by(cyl, hp) %>%
   summarise(
     count = n(),
     hp = mean(hp),
     stdev = sd(hp)
   )
#> `summarise()` has grouped output by 'cyl'. You can override using the `.groups` #> argument.
#> # A tibble: 23 x 4
#> # Groups:   cyl [3]
#>      cyl    hp count stdev
#>    <dbl> <dbl> <int> <dbl>
#>  1     4    52     1    NA
#>  2     4    62     1    NA
#>  3     4    65     1    NA
#>  4     4    66     2    NA
#>  5     4    91     1    NA
#>  6     4    93     1    NA
#>  7     4    95     1    NA
#>  8     4    97     1    NA
#>  9     4   109     1    NA
#> 10     4   113     1    NA
#> # ... with 13 more rows

Hope this helps,

Rui Barradas


Às 14:14 de 11/03/2022, Jeff Reichman escreveu:
> r-help forum
> 
>   
> 
> When I run the following code
> 
>   
> 
> my_tbl %>%
> 
>    mutate(Bse_bwt = round(Bse_bwt * 2) / 2) %>%
> 
>    group_by(Cat, Bse_bwt) %>%
> 
>    summarize(count = n(), Bse_ftv = mean(Bse_ftv), stdev = 
> sd(Bse_ftv))
> 
>   
> 
> I get the following error:
> 
>   
> 
> Error: `stdev` refers to a variable created earlier in this summarise().
> 
> Do you need an extra mutate() step?
> 
>   
> 
> I suspect it is because the standard deviation of a length-one vector 
> is NA and R is errorerrors out on the standard deviation  of 1. So 
> then I tried
> 
>   
> 
> summarize(count = n(), Bse_ftv = mean(Bse_ftv), stdev = if(n()>1)
> sd(Bse_ftv) else 0) and this didn't seem to work either. So there has 
> to be a way to add some sort of error checker to my standard deviation 
> function to check if n > 1 and then take the standard deviation in dplyr.
> 
>   
> 
> Jeff
> 
>   
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see 
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list