Я играл с фреймом данных, и я не могу обернуть голову вокруг проблемы. Вот код, который я использовал:
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: прямо укажите все имена столбцов. Это более явное и делает ваш код более удобочитаемым.
В этом случае вы явно назовете каждый столбец на основании того, что слева от знака '=' в
data.frame()
. Справа от знака '=' вы назначаете значения этим столбцам. Вы можете сделать это, введя необработанные данные или введя переменную, которая уже настроена в вашей среде. В этом случае похоже, что вы пытаетесь создать фрейм данных с помощью переменных, которые вы уже настроили.Вообще говоря, вы захотите использовать знак "=", когда вы указываете аргументы внутри функции, в этом случае
data.frame()
. Вы будете использовать оператор присваивания '< -', если вы хотите создать новую переменную, только как вы использовали ее в первом фрагменте кода вашего вопроса.Когда вы указываете
as.Date(Date.of.Death)
внутри функцииdata.frame
в вашем первом фрагменте кода, функция фрейма данных смотрит на существующую переменную,Date.of.Death
и преобразует ее в новую переменную с новым форматом даты. Указав имя столбца сначала в функцииdata.frame()
, вы не создаете переменную в глобальной среде. Вы просто создаете новый столбец в вашем кадре данных на основе существующей переменной Date.of.Death.Другой способ сделать это - это преобразовать все в дату в исходной Date.of.Death переменная. См. Ниже.
Надеюсь, что это поможет.