# grapes-grapes-COMPUTE-grapes-grapes: Multivariate computation. In bruceR: Broadly Useful Convenient and Efficient R Functions

 %%COMPUTE%% R Documentation

## Multivariate computation.

### Description

Easily compute multivariate sum, mean, and other scores. Reverse scoring can also be easily implemented without saving extra variables. `Alpha` function uses a similar method to deal with reverse scoring.

Three ways to specify variables:

1. `var + items`: common and unique parts of variable names (suggested).

2. `vars`: a character vector of variable names (suggested).

3. `varrange`: starting and stopping positions of variables (NOT suggested).

### Usage

``````COUNT(data, var = NULL, items = NULL, vars = NULL, varrange = NULL, value = NA)

MODE(data, var = NULL, items = NULL, vars = NULL, varrange = NULL)

SUM(
data,
var = NULL,
items = NULL,
vars = NULL,
varrange = NULL,
rev = NULL,
range = likert,
likert = NULL,
na.rm = TRUE
)

.sum(
var = NULL,
items = NULL,
vars = NULL,
varrange = NULL,
rev = NULL,
range = likert,
likert = NULL,
na.rm = TRUE
)

MEAN(
data,
var = NULL,
items = NULL,
vars = NULL,
varrange = NULL,
rev = NULL,
range = likert,
likert = NULL,
na.rm = TRUE
)

.mean(
var = NULL,
items = NULL,
vars = NULL,
varrange = NULL,
rev = NULL,
range = likert,
likert = NULL,
na.rm = TRUE
)

STD(
data,
var = NULL,
items = NULL,
vars = NULL,
varrange = NULL,
rev = NULL,
range = likert,
likert = NULL,
na.rm = TRUE
)

CONSEC(
data,
var = NULL,
items = NULL,
vars = NULL,
varrange = NULL,
values = 0:9
)
``````

### Arguments

 `data` Data frame. `var` [Option 1] Common part across variables: e.g., `"RSES"`, `"XX.{i}.pre"` (if `var` string has any placeholder in braces `{...}`, then `items` will be pasted into the braces, see examples) `items` [Option 1] Unique part across variables: e.g., `1:10`, `c("a", "b", "c")` `vars` [Option 2] Character vector specifying variables: e.g., `c("X1", "X2", "X3", "X4", "X5")` `varrange` [Option 3] Character string specifying positions ("start:stop") of variables: e.g., `"A1:E5"` `value` [Only for `COUNT`] The value to be counted. `rev` [Optional] Variables that need to be reversed. It can be (1) a character vector specifying the reverse-scoring variables (recommended), or (2) a numeric vector specifying the item number of reverse-scoring variables (not recommended). `range, likert` [Optional] Range of likert scale: e.g., `1:5`, `c(1, 5)`. If not provided, it will be automatically estimated from the given data (BUT you should use this carefully). `na.rm` Ignore missing values. Defaults to `TRUE`. `values` [Only for `CONSEC`] Values to be counted as consecutive identical values. Defaults to all numbers (`0:9`).

### Value

A vector of computed values.

### Functions

• `COUNT()`: Count a certain value across variables.

• `MODE()`: Compute mode across variables.

• `SUM()`: Compute sum across variables.

• `.sum()`: Tidy version of `SUM`, only can be used in `add()/added()`

• `MEAN()`: Compute mean across variables.

• `.mean()`: Tidy version of `MEAN`, only can be used in `add()/added()`

• `STD()`: Compute standard deviation across variables.

• `CONSEC()`: Compute consecutive identical digits across variables (especially useful in detecting careless responding).

### Examples

``````d = data.table(
x1 = 1:5,
x4 = c(2,2,5,4,5),
x3 = c(3,2,NA,NA,5),
x2 = c(4,4,NA,2,5),
x5 = c(5,4,1,4,5)
)
d
## I deliberately set this order to show you
## the difference between "vars" and "varrange".

## ====== Usage 1: data.table `:=` ====== ##
d[, `:=`(
na = COUNT(d, "x", 1:5, value=NA),
n.2 = COUNT(d, "x", 1:5, value=2),
sum = SUM(d, "x", 1:5),
m1 = MEAN(d, "x", 1:5),
m2 = MEAN(d, vars=c("x1", "x4")),
m3 = MEAN(d, varrange="x1:x2", rev="x2", range=1:5),
cons1 = CONSEC(d, "x", 1:5),
cons2 = CONSEC(d, varrange="x1:x5")
)]
d

## ====== Usage 2: `add()` & `added()` ====== ##
data = as.data.table(psych::bfi)
added(data, {
gender = as.factor(gender)
education = as.factor(education)
E = .mean("E", 1:5, rev=c(1,2), range=1:6)
A = .mean("A", 1:5, rev=1, range=1:6)
C = .mean("C", 1:5, rev=c(4,5), range=1:6)
N = .mean("N", 1:5, range=1:6)
O = .mean("O", 1:5, rev=c(2,5), range=1:6)
}, drop=TRUE)
data

## ====== New Feature for `var` & `items` ====== ##
d = data.table(
XX.1.pre = 1:5,
XX.2.pre = 6:10,
XX.3.pre = 11:15
)
add(d, { XX.mean = .mean("XX.{i}.pre", 1:3) })
add(d, { XX.mean = .mean("XX.{items}.pre", 1:3) })  # the same
add(d, { XX.mean = .mean("XX.{#\$%^&}.pre", 1:3) })  # the same

``````

bruceR documentation built on Sept. 27, 2023, 5:06 p.m.