Указание имен столбцов в data.frame меняет пробелы на «.» - PullRequest
29 голосов
/ 05 августа 2010

Допустим, у меня есть 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))

head (df, 3)

возвращает:

  Label.1    Label.2
1       1  1.9825458
2       2 -0.4515584
3       3  0.6397516

Как мнезаставить R остановить автоматическую замену пробела точкой в ​​имени столбца?т. е. «Метка 1» вместо «Метка 1».

Ответы [ 4 ]

59 голосов
/ 05 августа 2010

Вы можете установить 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`
8 голосов
/ 05 августа 2010

Вы этого не сделаете.

Если вы захотите, формат не будет удовлетворять требованиям для идентификатора, который будет воспроизводиться при использовании df$column.1, который не справляется с пробелом.Смотрите подробности или пример функции make.names():

> make.names(c("Foo Bar", "tic tac"))
[1] "Foo.Bar" "tic.tac"  
>                                              
5 голосов
/ 05 августа 2010

Вы можете изменить имена существующих фреймов данных, чтобы они содержали пробелы, например, используя ваш пример

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

0 голосов
/ 13 февраля 2019
names(df)<-c('Label 1','Label 2)
...