Указание имен столбцов в data.frame меняет пробелы на "."
Скажем, у меня есть data.frame, например:
x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))
голова (DF, 3)
возвращает:
Label.1 Label.2
1 1 1.9825458
2 2 -0.4515584
3 3 0.6397516
Как мне получить R, чтобы остановить автоматическую замену пространства с периодом в имени столбца? т.е. "Метка 1" вместо "Метка1".
Ответы
Ответ 1
Нет.
С пространством, которое вы хотите, формат не будет удовлетворять требованиям для идентификатора, который появляется, когда вы используете df$column.1
- который не может справиться с пробелом. Поэтому см. Функцию make.names()
для получения более подробной информации или примера:
> make.names(c("Foo Bar", "tic tac"))
[1] "Foo.Bar" "tic.tac"
>
Ответ 2
Вы можете установить check.names = FALSE
в data.frame
(а также в read.table
):
df <- data.frame("Label 1" = 1:3, "Label 2" = rnorm(3), check.names = FALSE)
возвращает:
Label 1 Label 2
1 1 0.2013347
2 2 1.8823111
3 3 -0.5233811
От ?data.frame
:
check.names
логичной. Если TRUE
, то имена переменных в кадре данных проверяются, чтобы убедиться, что они являются синтаксически допустимыми именами переменных и не дублируются. При необходимости они настраиваются (на make.names
), чтобы они были.
От ?make.names
:
Синтаксически действительное имя состоит из букв, цифр и символов точки или подчеркивания и начинается с буквы или точки, за которой не следует число. Имена, такие как ".2way", недействительны и не являются зарезервированными словами.
Все недопустимые символы переводятся на ".
"
Кроме того, если вам нужно подмножить переменную с недопустимым именем с помощью $
, вы можете использовать обратные ссылки `
. Например:
df$`Label 1`
Ответ 3
Вы можете изменить существующие имена фреймов данных, чтобы они содержали пробелы, т.е. используя ваш пример
x <- c(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10)
df <- data.frame("Label 1"=x,"Label 2"=rnorm(100))
colnames(df) <- c("Label 1", "Label 2")
head(df, 3)
возвращает
Label 1 Label 2
1 1 0.2013347
2 2 1.8823111
3 3 -0.5233811
и вы можете получить доступ к столбцам с помощью оператора $, вам просто нужно использовать двойные кавычки, например
df$"Label 2"[1:3]
возвращает
[1] 0.2013347 1.8823111 -0.5233811
Мне кажется, что я не могу автоматически преобразовывать имена столбцов при создании data.frame, но не делать то же самое при изменении имени столбца, но это то, как работает R в данный момент.