2014-01-14 50 views
0

我想创建一个data.frame列名指定。当我输入以下内容:创建数据时X和点添加到列名框架

df_ht <- data.frame("Teams" = NA, "Shots" = NA, "Shots On Target" = NA) 

我得到以下标题:

   Teams Shots Shots.On.Target 
1    NA NA    NA 

后来我把旁边的名称空间来尝试间隔出来的实际列名称:

df_ht <- data.frame(" Teams " = NA, " Shots " = NA, " Shots On Target " = NA) 

我得到了这个:

  X.Teams. X.Shots. X.Shots.On.Target. 
1   NA   NA     NA 

为什么会出现X.?我怎样才能摆脱.

+3

阅读'?data.frame'文档,并特别注意'check.names'参数。按照提供的链接。 – joran

+0

在http://stackoverflow.com/questions/3411201/specifying-column-names-in-a-data-frame-changes-spaces-to找到解决方案。需要将check.names设置为False。 – Dombey

+1

事实上,正如它在文档中所说的那样。 – joran

回答

2

当您创建data.frame时,默认情况下它具有选项check.names = TRUE。这意味着R将检查提供的名称是否是语法上有效的名称,并且它们是使用make.names创建的。

?make.names,语法上有效的名称:

[..]由字母,数字和点或下划线字符 并以字母或后面没有数点开始。名称 (如“.2way”)无效,保留字也不是。

另外,无效字符被点代替。

如果你

df_ht <- data.frame(" Teams " = NA, " Shots " = NA, 
        " Shots On Target " = NA, check.names=FALSE) 

你会得到你想要的东西,但不建议这样做的。调用或使用data.frame中的变量会有很多复杂性(如需要在列/变量名称后面使用back tick或失去自动完成功能)。列名的用途是使用它们,如df_ht$Teams,并且能够操纵它们,打印时不会看起来很好。

+0

给予列名的好处在于它们很容易操作。但请注意,使用back ticks是解决这个问题的一种方法。 – Dombey

+0

@Dombey,那是我刚才谈到的并发症。 –