2010-08-05 41 views
21

Hãy nói rằng tôi có một data.frame, như vậy:Chỉ định tên cột trong một data.frame thay đổi dấu cách thành "."

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)) 

đầu (df, 3)

lợi nhuận:

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

Làm thế nào để tôi nhận được R để ngăn chặn Automagically thay thế không gian với một khoảng thời gian trong tên cột? tức là "Nhãn 1" thay vì "Label.1".

Trả lời

9

Bạn không.

Với không gian bạn mong muốn định dạng sẽ không đáp ứng các yêu cầu cho số nhận dạng phát khi bạn sử dụng df$column.1 - không thể đối phó với không gian. Vì vậy, thấy make.names() chức năng để biết chi tiết hoặc một ví dụ:

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

Hrmmm, đây là mục đích đầu ra. Data.frame sẽ không được sử dụng để tính toán thêm tại thời điểm này (tức là nó sẽ đi thẳng đến write.table()) –

+0

Đó là một yêu cầu ngôn ngữ. Bạn có thể tạo các chức năng in ấn đẹp của riêng bạn mà thay thế * cho đầu ra * nhưng bạn không thể thay đổi cách tạo khung dữ liệu. –

+1

@Brandon, bạn có thể chỉ định 'col.names' trong' write.table'. Một cái gì đó như 'col.names = gsub (" \\. "," ", Colnames (df))' nên thực hiện thủ thuật. –

4

Bạn có thể thay đổi một dữ liệu khung tên hiện có để chứa khoảng trắng tức là sử dụng ví dụ của bạn

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) 

lợi nhuận

Label 1 Label 2 
1  1 0.2013347 
2  2 1.8823111 
3  3 -0.5233811 

và bạn vẫn có thể truy cập các cột bằng cách sử dụng toán tử $, bạn chỉ cần sử dụng dấu ngoặc kép, ví dụ:

df$"Label 2"[1:3] 

lợi nhuận

[1] 0.2013347 1.8823111 -0.5233811 

Nó có vẻ khá phù hợp với tôi để tên cột tự động chuyển đổi khi data.frame sáng tạo, nhưng không phải để làm điều tương tự trong tên cột thay đổi, nhưng thats cách R làm việc tại chốc lát.

40

Bạn có thể thiết lập check.names = FALSE trong data.frame (cũng như trong read.table):

df <- data.frame("Label 1" = 1:3, "Label 2" = rnorm(3), check.names = FALSE) 

lợi nhuận:

Label 1 Label 2 
1  1 0.2013347 
2  2 1.8823111 
3  3 -0.5233811 

Từ ?data.frame:

check.names
hợp lý. Nếu TRUE thì tên của các biến trong khung dữ liệu được chọn để đảm bảo rằng chúng là các tên biến hợp lệ cú pháp và không bị trùng lặp. Nếu cần, chúng được điều chỉnh (theo số make.names) để chúng được.


Từ ?make.names:

Một tên cú pháp hợp lệ bao gồm chữ cái, số và dấu chấm hoặc gạch chân các nhân vật và bắt đầu bằng chữ cái hoặc dấu chấm không theo sau là một số. Các tên như ".2way" không hợp lệ và không phải là các từ dành riêng.

Tất cả các ký tự không hợp lệ được dịch sang "."


Ngoài ra, nếu bạn cần phải tập hợp con một biến với một cái tên 'hợp lệ' sử dụng $, bạn có thể sử dụng backticks `. Ví dụ:

df$`Label 1` 
Các vấn đề liên quan