@ Дейсон дал вам хороший код для работы в качестве отправной точки. Я попытаюсь объяснить, почему (я думаю) то, что вы пытались, не сработало.
biginstances <- studenttable>1000
Это создаст логический вектор, длина которого равна числу уникальных идентификаторов учеников. studenttable
содержит количество для каждого уникального значения data$Anon.Student.Id
. При попытке использовать этот логический вектор в subset
:
bigdata <- subset(data, (biginstances[Anon.Student.Id]))
его длина почти наверняка намного меньше, чем количество строк в data
. А поскольку критерий поднабора в subset
предназначен для идентификации строк data
, правила рециркуляции R вступают во владение, и вы получаете «странные» подмножества.
Я бы также добавил, что использование подмножеств для удаления уровней редких факторов не изменит атрибута уровней фактора . Другими словами, вы получите коэффициент обратно без экземпляров этого уровня, но все исходные уровни факторов останутся в атрибуте уровней. Например:
> fac <- factor(rep(letters[1:3],each = 3))
> fac
[1] a a a b b b c c c
Levels: a b c
> fac[-(1:3)]
[1] b b b c c c
Levels: a b c
> droplevels(fac[-(1:3)])
[1] b b b c c c
Levels: b c
Таким образом, вы захотите использовать droplevels
, если хотите убедиться, что эти уровни действительно «ушли». Также см. options(stringsAsFactors = FALSE)
.