Using this dat data.frame
DATA
dat <- read.table(text = c("
SiteID cat1 cat2 cat3
Site1 3 1 1
Site1 3 2 2
Site1 2 3 3
Site1 2 1 1
Site1 2 2 2
Site1 1 1 2
Site1 1 3 1
Site1 1 2 3
Site1 3 NA 2
Site1 1 2 NA"),header =T)
I calculated the mean
(of cat1
, cat2
and cat3
) and round
ed it to the nearest integer in R as below
R results
library(dplyr)
dat1 <- dat %>%
rowwise() %>%
mutate(avg = mean(c(cat1, cat2, cat3), na.rm = T),
avg_round = round(avg))
head(dat1, 10)
# A tibble: 10 × 6
# SiteID cat1 cat2 cat3 avg avg_round
# <fctr> <int> <int> <int> <dbl> <dbl>
#1 Site1 3 1 1 1.666667 2
#2 Site1 3 2 2 2.333333 2
#3 Site1 2 3 3 2.666667 3
#4 Site1 2 1 1 1.333333 1
#5 Site1 2 2 2 2.000000 2
#6 Site1 1 1 2 1.333333 1
#7 Site1 1 3 1 1.666667 2
#8 Site1 1 2 3 2.000000 2
#9 Site1 3 NA 2 2.500000 2
#10 Site1 1 2 NA 1.500000 2
Both 2.5
and 1.5
have been rounded to 2
This is different from Excel results where 2.5
has been rounded to 3
and 1.5
has been rounded to 2
. I can do the same in R using ceiling
but ceiling will change 1.3
to 2
which is not what I want.
Excel results
where
avg = AVERAGE(B2,C2,D2)
avg_round = ROUND(E2, 0)
Any suggestions why 1.5
and 2.5
both have been rounded to 2
? and is there any way to get the same Excel results in R?