R: Check whether two factors are crossed or nested

is_crossed {sjmisc} | R Documentation

## Check whether two factors are crossed or nested

### Description

These functions checks whether two factors are (fully) crossed or nested, i.e. if each level of one factor occurs in combination with each level of the other factor (`is_crossed()`) resp. if each category of the first factor co-occurs with only one category of the other (`is_nested()`). `is_cross_classified()` checks if one factor level occurs in some, but not all levels of another factor.

### Usage

    is_crossed(f1, f2)

    is_nested(f1, f2)

    is_cross_classified(f1, f2)

### Arguments

`f1` | Numeric vector or `factor`.
`f2` | Numeric vector or `factor`.

### Value

Logical. For `is_crossed()`, `TRUE` if factors are (fully) crossed, `FALSE` otherwise. For `is_nested()`, `TRUE` if factors are nested, `FALSE` otherwise. For `is_cross_classified()`, `TRUE`, if one factor level occurs in some, but not all levels of another factor.

### Note

If factors are nested, a message is displayed to tell whether `f1` is nested within `f2` or vice versa.

### References

Grace, K. The Difference Between Crossed and Nested Factors. (web)

### Examples

    # crossed factors, each category of
    # x appears in each category of y
    x <- c(1,4,3,2,3,2,1,4)
    y <- c(1,1,1,2,2,1,2,2)
    # show distribution
    table(x, y)
    # check if crossed
    is_crossed(x, y)

    # not crossed factors
    x <- c(1,4,3,2,3,2,1,4)
    y <- c(1,1,1,2,1,1,2,2)
    # show distribution
    table(x, y)
    # check if crossed
    is_crossed(x, y)

    # nested factors, each category of
    # x appears in one category of y
    x <- c(1,2,3,4,5,6,7,8,9)
    y <- c(1,1,1,2,2,2,3,3,3)
    # show distribution
    table(x, y)
    # check if nested
    is_nested(x, y)
    is_nested(y, x)

    # not nested factors
    x <- c(1,2,3,4,5,6,7,8,9,1,2)
    y <- c(1,1,1,2,2,2,3,3,3,2,3)
    # show distribution
    table(x, y)
    # check if nested
    is_nested(x, y)
    is_nested(y, x)

    # also not fully crossed
    is_crossed(x, y)

    # but partially crossed
    is_cross_classified(x, y)

[Package sjmisc version 2.7.5 Index]