Home > front end >  Is there a function in R to connect tapply with round?
Is there a function in R to connect tapply with round?

Time:05-11

Probably the solution is simple, but I can't find it right now. I like to use tapply in descriptive-statistical analyses. For example:

tapply(dataframe1$Means, dataframe2$gender, function(x) {
  c(
    "mean" = mean(x, na.rm = TRUE),
    "sd" = sd(x, na.rm = TRUE),
    "med" = median(x, na.rm = TRUE),
    "min" = min(x, na.rm = TRUE),
    "max" = max(x, na.rm = TRUE)
  )
})

Now I would like to have the results rounded directly to two places, but without writing them to another or new object.

Thanks for tips

CodePudding user response:

Is it what you are looking for? I added round(c(...), digits = 2) around the group of summary functions (mean, sd, etc.) so the function does the rounding inside tapply without creating a new object.

Edit: better version without repeating the round() function.

tapply(iris$Sepal.Length, iris$Species, 
       function(x){round(c("mean" = mean(x, na.rm = TRUE),
                     "sd" = sd(x, na.rm = TRUE), 
                     "med" = median(x, na.rm = TRUE), 
                     "min" = min(x, na.rm = TRUE), 
                     "max"= max(x, na.rm = TRUE)), digits = 2)})
#> $setosa
#> mean   sd  med  min  max 
#> 5.01 0.35 5.00 4.30 5.80 
#> 
#> $versicolor
#> mean   sd  med  min  max 
#> 5.94 0.52 5.90 4.90 7.00 
#> 
#> $virginica
#> mean   sd  med  min  max 
#> 6.59 0.64 6.50 4.90 7.90

Created on 2022-05-10 by the reprex package (v2.0.1)

CodePudding user response:

You can wrap your tapply with another lapply with round.

lapply(
  tapply(iris$Sepal.Length, iris$Species, function(x) {
    c("mean" = mean(x, na.rm = TRUE),
      "sd" = sd(x, na.rm = TRUE), 
      "med" = median(x, na.rm = TRUE), 
      "min" = min(x, na.rm = TRUE), 
      "max" = max(x, na.rm = TRUE))}), 
  round, digits = 2
)

$setosa
mean   sd  med  min  max 
5.01 0.35 5.00 4.30 5.80 

$versicolor
mean   sd  med  min  max 
5.94 0.52 5.90 4.90 7.00 

$virginica
mean   sd  med  min  max 
6.59 0.64 6.50 4.90 7.90 
  • Related