Подтвердить что ты не робот

Указание имен столбцов в 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".

4b9b3361

Ответ 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 в данный момент.