2012-10-20 60 views
3

我想打印列中心對齊的數據框。下面是我嘗試過的,我認爲打印數據框test1會導致列在中心對齊,但事實並非如此。有關我如何做到這一點的任何想法?列中心對齊的列打印數據框

test=data.frame(x=c(1,2,3),y=c(5,6,7)) 
names(test)=c('Variable 1','Variable 2') 
test[,1]=as.character(test[,1]) 
test[,2]=as.character(test[,2]) 
test1=format(test,justify='centre') 
print(test,row.names=FALSE,quote=FALSE) 
Variable 1 Variable 2 
      1   5 
      2   6 
      3   7 
print(test1,row.names=FALSE,quote=FALSE) 
Variable 1 Variable 2 
      1   5 
      2   6 
      3   7 
+0

你的意思的中心填充它們改變每個變量名的「寬度」是相等的長度列?因此,1,2,3在'變量1'的'a'(大致)下面排列? –

+0

@TylerRinker是的,這就是我的意思。 – Glen

+0

@格倫,請問[我的回答](http://stackoverflow.com/a/12985403/1270695)是否足以解決您的問題?如果不是,請添加評論,以便您的問題可以進一步處理。 – A5C1D2H2I1M1N2O1R2T1

回答

8

的問題是,爲了使這個像您期望的工作,「width」的說法需要也可以指定。

下面是一個例子:

test.1 <- data.frame(Variable.1 = as.character(c(1,2,3)), 
        Variable.2 = as.character(c(5,6,7))) 

# Identify the width of the widest column by column name 
name.width <- max(sapply(names(test.1), nchar)) 
format(test.1, width = name.width, justify = "centre") 
# Variable.1 Variable.2 
# 1  1   5  
# 2  2   6  
# 3  3   7 

但是,如何做到這一點的方式工作,其中,變量名是不同的長度列?不太好。

test.2 <- data.frame(A.Really.Long.Variable.Name = as.character(c(1,2,3)), 
        Short.Name = as.character(c(5,6,7))) 

name.width <- max(sapply(names(test.2), nchar)) 
format(test.2, width = name.width, justify = "centre") 
# A.Really.Long.Variable.Name     Short.Name 
# 1    1       5    
# 2    2       6    
# 3    3       7    

還有就是,當然,一種解決方法:通過使用空格(使用format()

orig.names <- names(test.2) # in case you want to restore the original names 
names(test.2) <- format(names(test.2), width = name.width, justify = "centre") 
format(test.2, width = name.width, justify = "centre") 
# A.Really.Long.Variable.Name   Short.Name   
# 1    1       5    
# 2    2       6    
# 3    3       7 
+0

,我正要破解'sprintf' +1 –