2012-04-02 38 views
5

下面是示例代碼,其產生有趣輸出:如何控制整數類型列的data.frame中的粘貼行爲?

> gg<-data.frame(x=c("a","b"),y=as.integer(c(1000,100000))) 
> gg 
    x  y 
1 a 1000 
2 b 100000 
> apply(gg,1,paste,collapse="") 
[1] "a 1000" "b100000" 
> apply(gg[1,],1,paste,collapse="") 
     1 
"a1000" 

在第一apply運行,R某種程度上知道如何墊附加空格。它是如何做到的,是否有可能控制這種行爲?

+0

看起來像它的假設都應該相同長度的字符原子能。 Ergo將sep = [value]設置爲動態?你想要的輸出是什麼? – Hansi 2012-04-02 12:38:18

+0

從'?apply',「應用嘗試將[X]通過as.matrix(如果它是二維的(例如數據框)或通過as.array)強制到數組」。 'as.matrix()'通過'format()'轉換爲字符,並且它有一個參數'trim',你可以嘗試改變爲TRUE來抑制前導空白。 – BenBarnes 2012-04-02 13:01:10

回答

6

apply只適用於數組或矩陣,所以它首先必須將您的data.frame轉換爲矩陣。 as.matrix(gg)創建填充。

看着as.matrix.data.frame,填充是由調用format(實際上是format.default)引起的,最終調用prettyNumprettyNum有一個preserve.width參數,默認值爲"common"

如果要對這種行爲更多的控制權,在你的data.frame轉換每一列代表一個字符向量調用apply前:

gg[,2] <- as.character(gg[,2]) 
apply(gg,1,paste,collapse="") 
# [1] "a1000" "b100000" 
相關問題