How to find mode across variables/vectors within a data row in R
average, r
Solution
The `modeest` package provides implements a number of estimators of the mode for unimodal univariate data.
This has a function `mfv` to return the most frequent value, or (as `?mfv` states) it is perhaps better to use `mlv(..., method = 'discrete')
library(modeest)
## assuming your data is in the data.frame dd
apply(dd[,2:6], 1,mfv)
[1] 5 7 4 2
## or
apply(dd[,2:6], 1,mlv, method = 'discrete')
[[1]]
Mode (most frequent value): 5
Bickel's modal skewness: -0.2
Call: mlv.integer(x = newX[, i], method = "discrete")
[[2]]
Mode (most frequent value): 7
Bickel's modal skewness: -0.4
Call: mlv.integer(x = newX[, i], method = "discrete")
[[3]]
Mode (most frequent value): 4
Bickel's modal skewness: -0.4
Call: mlv.integer(x = newX[, i], method = "discrete")
[[4]]
Mode (most frequent value): 2
Bickel's modal skewness: 0.4
Call: mlv.integer(x = newX[, i], method = "discrete")
Now, if you have ties for the most frequent, then you need to think about what you want. both `mfv` and `mlv.integer` will return all the values that tie for the most frequent. (although the print method only shows a single value)
Problem
Does anyone know how to find the mode (most frequent across variables for a single case in R? For example, if I had data on favorite type of fruit (x), asked nine times (x1-x9) for each respondent (id) in a survey. If I wanted to find the modal response for each test subject in the first five times asked, how would I program that in R? More succinctly, with the example data is below, how do I find the MODE within each case? ``` id x1 x2 x3 x4 x5 MODE(x1-x5)? 1 3 5 6 4 5 5 2 7 4 7 4 7 7 3 3 4 4 4 3 4 4 3 2 2 2 3 2 ```