2012-02-13 4 views
17

나는 문자열의 벡터를 가지고 있으며 그 중 하나를 가지고 고정 된 문자열을 만들고 싶다. 더 짧은 문자열은 공백으로 채워야합니다. 예 :R의 sprintf를 사용하여 END에 공백이있는 고정 폭 문자열을 만드는 방법은 무엇입니까?

c("fjdlksa01dada","rau","sjklf") 
sprintf("%8s") 
# returns 
[1] "fjdlksa01dada" "  rau"  " sjklf" 

문자열 끝 부분에 추가 공백을 넣을 수 있습니까?

gdata 패키지의 write.fwf에 대해 들었는데,이 패키지는 구형의 오래된 프로그램을위한 매우 구체적인 비표준 형식을 작성해야하기 때문에이 경우별로 도움이되지 않습니다.

답변

21

왼쪽 정렬 패딩 문자열

+0

사실을, 그러나 OP가 요구 한 것. –

+3

그렇지 않습니까? 그는 "하지만 문자열의 끝에 공백을 추가로 가져올 수 있습니까?"라고 씁니다. 또는 뭔가 혼란스러워합니까? –

+1

@DirkEddelbuettel OP는 끝에 공백을 묻기 때문에 이것이 맞는 것 같아 – James

10

이것은 printf 형식 문자열과 관련이 있으므로 R 질문보다는 표준 "C"가 더 많습니다. 당신은 명령 프롬프트에서이 작업을 테스트 할 수 있습니다

[email protected]:~$ printf "[% 8s]\n" foo 
[  foo] 
[email protected]:~$ printf "[%-8s]\n" foo 
[foo  ] 
[email protected]:~$ 

및 R에 패딩 왼쪽에 대해 동일하게 작동 :

R> vec <- c("fjdlksa01dada","rau","sjklf") 
R> sprintf("% 8s", vec) 
[1] "fjdlksa01dada" "  rau"  " sjklf"  
R> 

과 오른쪽

R> sprintf("%-8s", vec) 
[1] "fjdlksa01dada" "rau  "  "sjklf "  
R> 

편집 : 업데이트 일단 @ ran2가 실제로 요구 한 것을 더 잘 이해하면.

1

stringr 패키지 str_pad 제공 얻기 위해 8 앞에 마이너스를 추가

library(stringr) 
x <- c("fjdlksa01dada","rau","sjklf") 
str_pad(x, width=8, side="right") 

산출 :

[1] "fjdlksa01dada" "rau  "  "sjklf "