С простым вектором, таким как
x <- sample(letters[1:3], size=20, replace=T)
Я бы выделил наиболее часто встречающееся письмо с чем-то вроде
y <- table(x)
print(names(y)[y==max(y)])
"b"
Однако, использование той же техники для многомерного фрейма данных не работает:
set.seed(5)
x <- data.frame(c1=sample(letters[1:3], size=30, replace=T),
c2=sample(letters[4:5], size=30, replace=T),
c3=sample(letters[6:10], size=30, replace=T))
y <- table(x)
print(names(y)[y==max(y)])
NULL
Как извлечь уровни c1, c2 и c3, которые имеют наибольшее значение в таблице сопряженности?
Я знаю, что могу преобразовать таблицу в кадр данных и найтистрока, в которой столбец Freq является самым высоким, но учитывая количество измерений и уровней в моем наборе данных, преобразование в кадр данных не помещается в моей оперативной памяти.
Редактировать: Итакмой ожидаемый результат во втором случае будет c, d, j
, например:
z <- data.frame(y)
z[z$Freq==max(z$Freq), 1:3]
c1 c2 c3
27 c d j
Но учтите, что я не могу использовать вызов data.frame
для своих данных из-за проблем с оперативной памятью.