2011-07-04 43 views
5

Có thể sử dụng dấu cách trong ddply không?ddply và dấu cách trong các biến được trích dẫn

Tôi đang sử dụng dữ liệu từ bảng tính có nhiều khoảng trống trong tên cột và tôi muốn giữ những tên này vì sau này tôi muốn xuất dữ liệu này có cùng tên cột với tên gốc. Có hơn 200 cột và sử dụng make.names tất nhiên sẽ cho tôi tên riêng nhưng sau đó tôi mất tên cột ban đầu.

Tuy nhiên ddply dường như không thích khoảng trống? Có cách giải quyết nào không?

lev=gl(2, 3, labels=c("low", "high")) 
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE) 

> ddply(df, c("factor"), summarize, r.avg=mean(response)) 
factor r.avg 
1 low  2 
2 high  5 

> ddply(df, c("fac tor"), summarize, r.avg=mean(response)) 
Error in parse(text = x) : <text>:1:5: unexpected symbol 
: fac tor 
+1

Tôi nghĩ bạn có nghĩa là 'check.names = FALSE' lên trên. Lực lượng 'TRUE' ép buộc vào 'fac.tor' – Chase

+0

thực sự phải là FALSE – Johan

Trả lời

8

Bao bọc tên cột trong dấu tích đơn (`) dường như thực hiện thủ thuật.

ddply(df, "`fac tor`", summarize, r.avg=mean(response)) 

Bạn cũng có thể sử dụng chỉ mục cột có thể hoặc không thể hấp dẫn tùy thuộc vào độ lớn dữ liệu của bạn và kiến ​​thức về vị trí của từng cột trước.

ddply(df, 2, summarize, r.avg=mean(response)) 
+0

+1 Có, sử dụng backticks là con đường để đi. FYI, plyr cung cấp hàm '.()' Cho phép bạn chỉ định tên cột mà không cần phải trích dẫn chúng. Vì vậy, tôi muốn viết 'ddply (df,. (\' Fac tor \ '), tóm tắt, r.avg = mean (response))' – Andrie

+0

Cảm ơn, đây chính xác là những gì tôi cần. – Johan

1

tôi sẽ chỉ cần sử dụng một biểu thức chính quy để chuyển đổi không gian để một số nhân vật vô nghĩa, sau đó chuyển đổi trở lại ở cuối:

lev=gl(2, 3, labels=c("low", "high")) 
df=data.frame(factor=lev, "fac tor"=lev, response=1:6, check.names = FALSE) 
colnames(df) <- gsub(" ","~",colnames(df)) 
Các vấn đề liên quan