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]]
try changing Bse_ftv = mean(Bse_ftv) to Bse_ftv_mean = mean(Bse_ftv) On Fri, Mar 11, 2022 at 4:15 PM Jeff Reichman <reichmanj at sbcglobal.net> wrote:> 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 at 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. >[[alternative HTML version deleted]]
Can't see your data but perhaps: my_tbl %>% mutate(Bse_bwt = round(Bse_bwt * 2) / 2) %>% group_by(Cat, Bse_bwt) %>% summarize(count = n(), Bse_ftv = mean(Bse_ftv), stdev = if_else(count > 1, sd(Bse_ftv), NA_real_)) ----- Original Message -----> From: "Jeff Reichman" <reichmanj at sbcglobal.net> > To: r-help at r-project.org > Sent: Friday, 11 March, 2022 15:14:52 > Subject: [R] stdev error> 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 at 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.-- Chris Evans (he/him) <chris at psyctc.org> Visiting Professor, UDLA, Quito, Ecuador & Honorary Professor, University of Roehampton, London, UK. Work web site: https://www.psyctc.org/psyctc/ CORE site: https://www.coresystemtrust.org.uk/ Personal site: https://www.psyctc.org/pelerinage2016/ OMbook: https://ombook.psyctc.org/book/
Well I can see my "ifelse" syntax is wrong so I've changed it to summarize(count = n(), Bse_ftv = mean(Bse_ftv), stdev = ifelse(count>1, sd(Bse_ftv),0)) but still getting Error: `stdev` refers to a variable created earlier in this summarise(). Do you need an extra mutate() step? -----Original Message----- From: R-help <r-help-bounces at r-project.org> On Behalf Of Jeff Reichman Sent: Friday, March 11, 2022 8:15 AM To: r-help at r-project.org Subject: [R] stdev error 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 at r-project.org <mailto:R-help at 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. [[alternative HTML version deleted]]
? Fri, 11 Mar 2022 08:14:52 -0600 "Jeff Reichman" <reichmanj at sbcglobal.net> ?????:> 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.My interpretation of the error message is that summarise() thinks that you're creating a variable (Bse_ftv = mean(Bse_ftv)) and then asking summarise() to compute its standard deviation (stdev = sd(Bse_ftv)) in the same call. This is apparently not always supported, according to ?summarise [1]. You know that you meant the previously available Bse_ftv column, not the newly created Bse_ftv = mean(Bse_ftv), but this is not how the call is interpreted. Try setting a different name for the result of mean(Bse_ftv). -- Best regards, Ivan [1] https://search.r-project.org/CRAN/refmans/dplyr/html/summarise.html
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 at 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.