#r
#r
Вопрос:
Я хотел бы видеть список всех возможных значений, без повторения, в столбце фрейма данных. Что — то вроде:
as.set(series["begin_year"][,1])
для столбца «begin_year», хотя as.set
и не существует.
Комментарии:
1. Будет
unique()
ли выполнена работа? Или, если столбец является фактором,levels()
? Или я неправильно понимаю ваш вопрос?2. @jthetzel, заставь его ответить 😉
Ответ №1:
unique()
[или levels()
, если столбец является фактором].
Вот воспроизводимый пример:
dat <- OrchardSprays
dat$rowpos
unique(dat$rowpos)
dat$treatment
unique(dat$treatment)
levels(dat$treatment)
Редактировать
Обратите внимание, что levels()
это вернет уникальные уровни фактора, даже если уровень не используется. Рассмотрим:
dat2 <- subset(dat, treatment != "A")
unique(dat2$treatment)
# [1] D E B H G F C
# Levels: A B C D E F G H
levels(dat2$treatment)
# [1] "A" "B" "C" "D" "E" "F" "G" "H"
Вы можете избавиться от неиспользуемых уровней с помощью droplevels()
:
dat2$treatment <- droplevels(dat2$treatment)
levels(dat2$treatment)
# [1] "B" "C" "D" "E" "F" "G" "H"
Комментарии:
1. Здесь следует отметить, что слово «множество» используется строго для работы с функциями алгебраической теории множеств. Насколько я могу судить, вам действительно нужен был только вектор, поэтому
unique
иlevels
нужно идти.2. <педантичный> Это не алгебраическая теория множеств. Это просто (элементарная) теория множеств. </ pedantic> 🙂 Существует область алгебраической теории множеств, но пересечение с соответствующими функциями R, за вычетом функций, относящихся к теории множеств, есть…
Ответ №2:
Это должна сделать функция unique, а также есть несколько других функций, связанных с набором: union, intersect, setdiff, setequal и is.element, которые описаны на странице справки (объединение).