2011-07-04 7 views
5

ddply에서 공백을 사용할 수 있습니까?ddply 및 인용 된 변수의 공백

저는 열 이름에 공백이 많은 스프레드 시트의 데이터를 사용하고 있습니다. 나중에이 데이터를 원본과 동일한 열 이름으로 내보내 려하므로 해당 이름을 유지하고 싶습니다. 200 개 이상의 열이 있고 make.names를 사용하면 적절한 이름을 부여하지만 원래 열 이름은 잃어 버리게됩니다.

그러나 ddply는 공백을 좋아하지 않는 것 같습니까? 해결 방법이 있습니까?

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

난 당신이 check.names = FALSE '까지 위의'의미 생각합니다. 'TRUE'는 강제로'fac.tor'로 강요합니다 – Chase

+0

실제로 거짓이어야합니다 – Johan

답변

8

단일 백 틱 (`)으로 열 이름을 배치하면 트릭을 수행하는 것처럼 보입니다.

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

또한 또는 data.frame이며, 각 컬럼의 위치에 대한 지식 사전에 얼마나 큰에 따라 호소하지 않을 수 있습니다 열 인덱스를 사용할 수 있습니다.

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

+1 예, backticks를 사용하는 것이 좋습니다. 참고로, plyr은 인용 부호없이 열 이름을 지정할 수있는'.()'함수를 제공합니다. 그래서 나는'ddply (df,. (\'fac tor \'),''summary.vg = mean (response))'' – Andrie

+0

을 쓰고 싶습니다. – Johan

1

난 그냥 그 끝에서 다시 변환, 어떤 의미없는 문자로 공간을 변환하는 정규 표현식을 사용합니다 :

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