在data.frame中指定列名称会将空格更改为“。”

时间:2010-08-05 01:50:14

标签: r dataframe names illegal-characters

假设我有一个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”而不是“Label.1”。

4 个答案:

答案 0 :(得分:57)

您可以在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`

答案 1 :(得分:8)

你没有。

使用您想要的空间格式将无法满足使用df$column.1时无法处理的标识符的要求 - 无法处理空间。因此,请参阅make.names()函数以获取详细信息或示例:

> make.names(c("Foo Bar", "tic tac"))
[1] "Foo.Bar" "tic.tac"  
>                                              

答案 2 :(得分:5)

您可以更改现有数据框名称以包含空格,例如使用您的示例

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目前的工作方式。

答案 3 :(得分:0)

names(df)<-c('Label 1','Label 2)