Иногда бывает такая ситуация, что вам нужно создать DataFrame вручную, и в этом видео мы разберем, как это делать. На самом деле это задача довольно распространенная, потому что, например, тот пакет, который мы используем для рисования графиков ggplot, он любит, чтобы данные были представлены в виде DataFrame, поэтому иногда приходится специальным образом их преобразовывать. Потом, в следующих курсах, мы с вами будем подготавливать данные, чтобы делать предсказания при помощи линейной регрессии, и там тоже нужно уметь создавать DataFrame-ы с нуля. Собственно в этом видео мы об этом поговорим, и в конце, я думаю, вы сможете создать свой первый DataFrame ручной работы, практически произведение искусства. DataFrame можно создавать из векторов одинаковой длины. Я думаю, что вам уже приходила в голову, пока мы кромсали DataFrame о "Звездных войнах" на разные части, приходило в голову мысли, что DataFrame, на самом деле, это коллекция векторов, это почти так. Чтобы создать наш новый DataFrame, нам нужно создать сначала эти векторы. Давайте попробуем создать вектор с именами персонажей, p_name, в этом векторе будут перечислены известные джедаи Люк Скайвокер, Дарт Вейдер, Оби-Ван Кеноби и Йода. Что мы про них знаем? Мы знаем с какой они планеты. Только про Йоду мы не знаем, с какой он планеты, поэтому в этом векторе мы запишем NA. В разное время все эти существа владели какими-то межзвездными кораблями, только мастер Йода ничем не владел, поэтому в этом числовом векторе мы запишем ноль, и чтобы эти векторы не хранились отдельно и не засоряли наши рабочее пространство, чтобы нам удобнее было к ним обращаться, давайте их объединим в DataFrame при помощи функции data.frame. У этой функции очень простой формат. Вы там перечисляете переменные, которые должны быть в DataFramе. Слева вы пишете имя будущей переменной, справа - ее содержимое. Т.е. мы создаем переменную name в DataFrameе, и туда кладем вектор p_name. Создаем переменную homeworld и туда кладем вектор planet и в новом DataFrame все переменные получат те названия, которые стояли у нас слева. Текстовые векторы в DataFramе-ах превращаются по умолчанию в факторы. Это делает сама функция data.frame. Если мы посмотрим на структуру DataFrame jedi, которое мы создали, то вы увидите, что у нас есть два фактора: там, где записано имя, это фактор, и там, где записана планета, это тоже фактор. И это на самом деле не всегда удобно, потому что, смотрите, если названия планет повторяются, их имеет смысл превратить в фактор, потому что там за счет того, что мы используем таблицу перекодировки, получится какая-то экономия, но с именами эта ситуация совершенно здесь не повторяется. Имена у каждого свои, и нет смысла делать их фактором. Давайте попробуем избежать этого превращения. Самый простой способ - это изменить аргумент функции data.frame, у неё много аргументов, вы можете посмотреть их в справке, ни вот нам сейчас понадобится аргумент stringsAsFactors. Этот аргумент логический переключатель. По умолчанию stringsAsFactors true, то есть он все строковые значения, все тексты превращает в фактора, что мы и видели. Если мы скажем false, то в результате получившийся DataFrame будет содержать текстовые значения без изменений, и это тоже не очень удобно, потому что на самом деле мы бы все таки хотели, чтобы планеты были фактором, потому что у нас есть джедаи с одной и той же планеты. Это было бы логично. Как мы можем этого добиться? Только вручную. Мы берем нашу прежнюю переменную jedi$homeworld, передаем ее функции factor, и она превратит ее в фактор, который мы запишем на то же самое место. После этого в DataFramе все переменные будут тех типов, которые мы хотели. Поздравляю! Вы создали свой первый DataFrame ручной работы, и это умение мы не раз еще используем. Но на самом деле, данные в R не всегда создаются руками, наоборот, гораздо чаще мы их получаем из каких-то внешних источников, и в следующих нескольких видео Вадим вам расскажет о том, как это делается, научит вас открывать файлы.