Добавление максимальных уровней к обоим факторам

У меня есть 2 фактора А и В: Фактор А имеет следующие уровни:

> levels (A)
[1] "1" "2" "3"

Тогда как фактор B имеет следующие уровни:

> levels (B)
[1] "1" "2"

Я хотел бы рассчитать долю элементов, у которых их уровни совпадают, поэтому я использую следующее:

C<-mean (A == B)

Так как они должны быть одного уровня. Я добавил к B уровень «3»:

levels(B) <- c(levels(B), "3")

Однако это всего лишь пример, так как иногда A имеет больше уровней, чем B, а иногда B имеет больше уровней, чем A. Я хотел бы вставить в каждый из них максимальное количество уровней, чтобы они были одинаковыми, и я смогу для расчета C. Как я могу это сделать?


person Avi    schedule 28.09.2015    source источник
comment
Возможно levels(B) <- union(levels(A), levels(B)) но я думаю вам нужно будет показать нам свои векторы и желаемый результат. Взять среднее значение фактора - плохая идея.   -  person Rich Scriven    schedule 28.09.2015
comment
Вы можете проверить длину levels ваших векторов и соответственно добавить недостающие.   -  person mrub    schedule 28.09.2015


Ответы (1)


Похоже, вы пытаетесь проверить пропорцию совпадений уровней двух факторов и сталкиваетесь с ошибками, когда факторы имеют разные наборы уровней; возможно что-то вроде:

a <- factor(c("a", "b", "c"))
b <- factor(c("b", "b", "c"))
a == b
# Error in Ops.factor(a, b) : level sets of factors are different

Вместо того, чтобы возиться с уровнями факторов, чтобы избавиться от этой ошибки, я бы просто использовал as.character, чтобы получить имена уровней, а затем сравнить:

mean(as.character(a) == as.character(b))
# [1] 0.6666667
person josliber♦    schedule 28.09.2015