Я пытаюсь написать код, который позволит мне найти количество каждого фактора для каждого столбца в R с ограничением, что я хочу, чтобы уровни факторов были одинаковыми в каждом столбце. Я думал, что это должно быть тривиально, но я сталкиваюсь с двумя ситуациями, когда R не возвращает то значение, которое я ожидаю при использовании apply с фактором и использовании apply с таблицей.
Рассмотрим этот пример данных:
mat <- matrix(sample(1:10,90,replace=TRUE),ncol=10,nrow=9)
mat.levels <- as.character(unique(as.vector(mat)))
mat.factor <- as.data.frame(apply(mat,2,as.character))
Моим первым шагом было переоценить каждый столбец, чтобы уровни факторов были одинаковыми. Сначала попробовал:
apply(mat.factor,2,factor,levels=mat.levels)
#But the data structure is all wrong, I don't appear to have a factor anymore!
str(apply(mat.factor,2,factor,levels=mat.levels))
Поэтому я взломал его, используя вместо этого цикл ...
for (i in 1:ncol(mat.factor)) {
levels(mat.factor[,i]) <- mat.levels
}
Затем я столкнулся с другой проблемой с применением. Я думал, что теперь у меня установлены уровни факторов, если мне не хватало данного фактора в столбце, табличная функция должна возвращать счетчик 0 для этого уровня фактора. Однако, когда я использовал apply, казалось, что уровни факторов с нулевым счетом выпали!
apply(mat.factor,2,table)$V10
str(apply(mat.factor,2,table)$V10)
#But running table just on that one column yields the expected result!
table(mat.factor[,10])
str(table(mat.factor[,10]))
Может кто-нибудь объяснить, что происходит в этих двух случаях? Что я неправильно понимаю?