R Создание data.frame и обработка объекта как. Дата - R Версия 3.5.0 - Rstudio Версия 1.1.447 - - PullRequest
0 голосов
/ 05 июня 2018

Я играл с фреймом данных и не могу решить проблему.Вот код, который я использовал:

Died.At <- c(22,40,72,41)
Writer.At <- c(16, 18, 36, 36)
First.Name <- c("John", "Edgar", "Walt", "Jane")
Second.Name <- c("Doe", "Poe", "Whitman", "Austen")
Sex <- c("MALE", "MALE", "MALE", "FEMALE")
Date.Of.Death <- c("2015-05-10", "1849-10-07", "1892-03-26","1817-07-18")
writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, as.Date(Date.Of.Death))

Вот результат:

 str (writersdataframe)
'data.frame':   4 obs. of  6 variables:
 $ Died.At               : num  22 40 72 41
 $ Writer.At             : num  16 18 36 36
 $ First.Name            : 'AsIs' chr  "John" "Edgar" "Walt" "Jane"
 $ Second.Name           : 'AsIs' chr  "Doe" "Poe" "Whitman" "Austen"
 $ Sex                   : Factor w/ 2 levels "FEMALE","MALE": 2 2 2 1
 $ as.Date.Date.Of.Death.: Date, format: "2015-05-10" "1849-10-07" "1892-03-26" ...

Я написал такой код, потому что хочу, чтобы R интерпретировал Date.Of.Death как дату, но я не хочу, чтобы. Дата показа в имени столбца внутри фрейма данных.Я нашел способ сделать это, то есть изменить формат перед созданием фрейма данных:

Date.Of.Death <- as.Date(Date.Of.Death)
writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, I(Date.Of.Death))

Я проверил:

class(writersdataframe$Date.Of.Death)
[1] "AsIs" "Date"

Что мне было интересно, могу ли ясоздайте фрейм данных, обрабатывая Date.Of.Death as.Date непосредственно в функции data.frame.Есть ли причина, по которой это делается (например:

writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, as.Date(Date.Of.Death))

), переименовывает заголовок столбца или я допустил ошибку?

1 Ответ

0 голосов
/ 11 июня 2018

См. Пояснения ниже для уточнения.

Существует несколько способов решения проблемы в исходном вопросе.

Решение 1: непосредственно укажите все имена столбцов.Это более явно и делает ваш код более читабельным.

writersdataframe <- data.frame(Died.At = Died.At, Writer.At = Writer.At, First.Name = First.Name, Second.Name = Second.Name, Sex = Sex, Date.of.Death = as.Date(Date.Of.Death))

В этом случае вы явно именуете каждый столбец на основе того, что находится слева от знака '=' в функции data.frame().Справа от знака '=' вы присваиваете значения этим столбцам.Вы можете сделать это, введя необработанные данные или введя переменную, которая уже установлена ​​в вашей среде.В этом случае похоже, что вы пытаетесь создать фрейм данных, используя переменные, которые вы уже установили.

Вообще говоря, вы захотите использовать знак '=' при указании аргументов внутри функции, в данном случае data.frame().Вы будете использовать оператор присваивания '<-', когда хотите создать новую переменную, точно так же, как вы использовали ее в первом фрагменте кода вашего вопроса.</p>

Когда вы задаете as.Date(Date.of.Death) в функции data.frame в своем первом фрагменте кода, функция фрейма данных просматривает существующую переменную Date.of.Death и преобразовывает ее в новую переменную с новымФормат даты.Указывая сначала имя столбца в функции data.frame(), вы не создаете переменную в глобальной среде.Вы просто создаете новый столбец в вашем фрейме данных на основе существующей переменной Date.of.Death.

Другой способ сделать это - преобразовать все в дату в исходной переменной Date.of.Death.,См. Ниже.

Date.Of.Death <- as.Date(c("2015-05-10", "1849-10-07", "1892-03-26","1817-07-18"))

writersdataframe <- data.frame(Died.At, Writer.At, I(First.Name), I(Second.Name), Sex, I(Date.Of.Death))

Надеюсь, это поможет.

...