2010-08-05 25 views
21

比方说,我有一个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”。

回答

9

你不知道。

随着你期望的空间格式不符合标准的要求,当你使用df$column.1 - 这无法应对空间。所以详见make.names()功能或一个例子:

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

Hrmmm,这是用于输出的目的。在这一点上data.frame将不会被用于进一步的计算(即直接写入write.table()) – 2010-08-05 01:59:48

+0

这是一种语言要求。你可以创建你自己漂亮的打印函数来替代输出*,但是你不能改变data.frame的创建方式。 – 2010-08-05 02:16:43

+1

@Brandon,你可以在'write.table'中指定'col.names'。就像'col.names = gsub(“\\。”,“”,colnames(df))'应该这样做。 – 2010-08-05 02:19:14

4

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

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是如何工作的时刻。

40

你可以设置在data.framecheck.names = FALSE(以及在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`