Как таблица и функция $ freq работают в R - PullRequest
1 голос
/ 18 января 2020

Я хочу функцию для режима вектора. Абхир oop Ответ Саркара на Этот вопрос работает, но я хочу понять, почему.

Вот код

Mode <- function(x){

y <- data.frame(table(x))
y[y$Freq == max(y$Freq),1]
}

1) Почему нам нужно поместите таблицу во фрейм данных,

2) в этой строке

 y[y$Freq == max(y$Freq),1]

что делает y $ Freq? частота является столбцами по умолчанию в таблице?

1 Ответ

3 голосов
/ 18 января 2020

Когда мы конвертируем вывод table в data.frame, он создает два столбца data.frame

set.seed(24)
v1 <- table(sample(1:5, 100, replace  = TRUE))
y <- data.frame(v1)
y
#  Var1 Freq
#1    1   19
#2    2   24
#3    3   22
#4    4   16
#5    5   19

Первый столбец «Var1» - это names частоты, выводимой из table, а 'Freq' - это фактическая частота этих names

y[y$Freq == max(y$Freq), 1]
#[1] 2
#Levels: 1 2 3 4 5

Теперь мы поднастроим первый столбец 'Var1' на основе значения max 'Freq', и это возвращает vector из-за drop = TRUE в [ при наличии одного столбца

Если мы хотим вернуть data.frame с одним, добавьте drop = FALSE в конце

y[y$Freq == max(y$Freq), 1, drop = FALSE]
#   Var1
#2    2

Что касается имени по умолчанию Freq, оно создается из метода as.data.frame.table

as.data.frame.table
function (x, row.names = NULL, ..., responseName = "Freq", stringsAsFactors = TRUE, 
    sep = "", base = list(LETTERS)) 
{
    ex <- quote(data.frame(do.call("expand.grid", c(dimnames(provideDimnames(x, 
        sep = sep, base = base)), KEEP.OUT.ATTRS = FALSE, stringsAsFactors = stringsAsFactors)), 
        Freq = c(x), row.names = row.names))
    names(ex)[3L] <- responseName
    eval(ex)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...