R Создание data.frame и обработка объекта as.Date - R Version 3.5.0 - Rstudio Version 1.1.447 -

Alessandro спросил: 12 мая 2018 в 04:01 в: r

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

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 как дату, но я не хочу, чтобы as.Date отображался в имени столбца внутри фрейма данных. Я нашел способ сделать это, это изменение формата перед созданием фрейма данных:

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.Is есть причина, что это делает (например:

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

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

1 ответ

LMunyan ответил: 18 мая 2018 в 07:18

Пожалуйста, ознакомьтесь с пояснениями ниже.

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

Решение 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(). Вы будете использовать оператор присваивания '< -', если вы хотите создать новую переменную, только как вы использовали ее в первом фрагменте кода вашего вопроса.

Когда вы указываете 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))

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