2011-12-05 23 views
5

我有一個非常長的「評論」欄的數據框。當我將它們顯示出來時,它們被分解成不同的塊,使得很難跨行讀取。是否可以更改R中的設置或修改對data.frame的調用以截斷特定長度的字符串?在查看數據框的內容時是否可以截斷輸出?

實例:3列數據幀我的屏幕上看到

data.frame(cbind(rep(1,5),rep(c("very very long obnoxious character string here" ,"dog","cat","dog",5)),rep(c("very very long obnoxious character string here" ,"dog","cat","dog",5)))) 

得到的數據幀:

X1            X2 
1 1 very very long obnoxious character string here 
2 1           dog 
3 1           cat 
4 1           dog 
5 1            5 
              X3 
1 very very long obnoxious character string here 
2           dog 
3           cat 
4           dog 
5            5 
+0

[與R中長串印刷dataframes]的可能重複( http://stackoverflow.com/questions/8343682/printing-dataframes-with-long-strings-in-r) – Andrie

回答

11

我推薦了一種明確的方法是這樣的:

f <- function(x) data.frame(lapply(x, substr, 1, 5)) 

用法:

> f(d) 
    X1 X2 X3 
1 1 very very 
2 1 dog dog 
3 1 cat cat 
4 1 dog dog 
5 1  5  5 

儘管可以更改默認的行爲,我不建議:

body(format.data.frame)[[5]] <- quote(for (i in 1L:nc) rval[[i]] <- substr(format(x[[i]], ..., justify = justify), 1, 5)) 
unlockBinding("format.data.frame", baseenv()) 
assign("format.data.frame", format.data.frame, pos = baseenv()) 
lockBinding("format.data.frame", baseenv()) 
rm(format.data.frame) 

用法:

> d 
    X1 X2 X3 
1 1 very very 
2 1 dog dog 
3 1 cat cat 
4 1 dog dog 
5 1  5  5 
+0

太棒了!我對正則表達式的探索並沒有讓我對substr有所瞭解 - 現在我有了一個將它添加到我的工具箱的起點。 –