как превратить вектор в набор в r

#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, которые описаны на странице справки (объединение).