Function that calculates the mean of a particular variable for each subject.

calc.mean(x, id, data, na.rm=TRUE, expand=FALSE)

Arguments

x

argument to specify the variable.

id

argument to specify a subject id variable.

data

optional data frame that contains the variables specified above.

na.rm

logical indicating whether missing values should be removed before computing the means (default is TRUE).

expand

logical indicating whether to expand the returned vector so that it can be added back to the dataset as a new variable (default is FALSE).

Details

The function computes the mean of a particular variable for each subject.

When expand=TRUE, the mean for each subject is repeated in such a way that the returned vector can be added back to the dataset as a new variable. See ‘Examples’.

Value

A vector.

Author

Wolfgang Viechtbauer wvb@wvbauer.com

See also

Examples

# illustrative dataset
dat <- data.frame(subj=rep(1:4, each=5),
                  obs = 1:5,
                  age = rep(c(20,31,27,22), each=5),
                  stress = c(2,3,NA,4,2, 3,3,NA,3,NA, 1,1,2,6,4, 1,2,1,3,1))
dat
#>    subj obs age stress
#> 1     1   1  20      2
#> 2     1   2  20      3
#> 3     1   3  20     NA
#> 4     1   4  20      4
#> 5     1   5  20      2
#> 6     2   1  31      3
#> 7     2   2  31      3
#> 8     2   3  31     NA
#> 9     2   4  31      3
#> 10    2   5  31     NA
#> 11    3   1  27      1
#> 12    3   2  27      1
#> 13    3   3  27      2
#> 14    3   4  27      6
#> 15    3   5  27      4
#> 16    4   1  22      1
#> 17    4   2  22      2
#> 18    4   3  22      1
#> 19    4   4  22      3
#> 20    4   5  22      1

# calculate the subject-level means of the stress variable
calc.mean(stress, subj, data=dat)
#>    1    2    3    4 
#> 2.75 3.00 2.80 1.60 

# add this variable back to the original dataset
dat$mstress <- calc.mean(stress, subj, data=dat, expand=TRUE)
dat
#>    subj obs age stress mstress
#> 1     1   1  20      2    2.75
#> 2     1   2  20      3    2.75
#> 3     1   3  20     NA    2.75
#> 4     1   4  20      4    2.75
#> 5     1   5  20      2    2.75
#> 6     2   1  31      3    3.00
#> 7     2   2  31      3    3.00
#> 8     2   3  31     NA    3.00
#> 9     2   4  31      3    3.00
#> 10    2   5  31     NA    3.00
#> 11    3   1  27      1    2.80
#> 12    3   2  27      1    2.80
#> 13    3   3  27      2    2.80
#> 14    3   4  27      6    2.80
#> 15    3   5  27      4    2.80
#> 16    4   1  22      1    1.60
#> 17    4   2  22      2    1.60
#> 18    4   3  22      1    1.60
#> 19    4   4  22      3    1.60
#> 20    4   5  22      1    1.60