2011-12-01 25 views
12

en tek bir sütunda uzun dizeli bir dataframe atalım:Baskı dataframes

df<-data.frame(short=rnorm(10,0,1),long=replicate(10,paste(rep(sample(letters),runif(1,5,8)),collapse=""))) 

tamamını nasıl dize göstermeden dataframe baskı olabilir? Böyle şey:

 short  long 
1 0.2492880 ghtaprfv... 
2 1.0168434 zrbjxvci... 
3 0.2460422 yaghkdul... 
4 0.1741522 zuabgxpt... 
5 -1.1344230 mzhjtwcr... 
6 -0.7104683 fcbhuegt... 
7 0.2749227 aqyezhbl... 
8 -0.4395554 azecsbnk... 
9 2.2837716 lkgwzedf... 
10 0.7695538 omiewuyn... 
+1

Tekrar üretilebilir örnek için teşekkürler! –

cevap

7

Sen print.data.frame yöntem yeniden olabilir ve bu fonksiyon kullanımı substr istenen maksimum uzunluğa karakterinizi vektörleri kırpmak için:

print.data.frame <- function (x, ..., maxchar=20, digits = NULL, quote = FALSE, 
    right = TRUE, row.names = TRUE) 
{ 
    x <- as.data.frame(
     lapply(x, function(xx) 
      if(is.character(xx)) substr(xx, 1, maxchar) else xx) 
) 
    base::print.data.frame(x, ..., digits=digits, quote=quote, right=right, 
     row.names=row.names) 
} 

oluştur veri.

df <- data.frame(
    short=rnorm(10,0,1), 
    long=replicate(10,paste(rep(sample(letters),runif(1,5,8)),collapse="")), 
    stringsAsFactors=FALSE 
) 

Print data.frame:

print(df, maxchar=10) 
     short  long 
1 -0.6188273 cpfhnjmeiw 
2 -0.0570548 bwcmpinedr 
3 -0.5795637 dcevnyihlj 
4 0.1977156 qzxlhvnarm 
5 -1.9551196 aiflwtkjdq 
6 -1.2429173 vlscerwhgq 
7 -0.5897045 fziogkpsyr 
8 0.4946985 pdeswloxcn 
9 0.3262543 kxlofchszd 
10 -1.8059621 wncaedpzty 
2

budur tek yön:

within(df, { 
    long = paste(substr(long, 1, 10), "...", sep = "") 
}) 

Ben substr kullanmak ben "..." için macunu kullanmak yerine, dize ilk kısmını alır. kalıcı df karakterleri değiştirmek için, yapın:

df = within(df, { 
    long = paste(substr(long, 1, 10), "...", sep = "") 
}) 
0

dplyr kullanır ve (bunu değiştirmeden) orijinal veri çerçevesinin değiştirilmiş bir sürümü yazdırır stringsAsFactors=FALSE benim eklenmesini unutmayın. Yalnızca belirtilen uzunluğu aşan değerleri kısaltır:

library(dplyr) 

print.data.frame(df %>% mutate(long = ifelse(
    nchar(long > 11), 
    paste0(substr(long, 1, 8), "..."), 
    long 
)))