2011-11-02 52 views
9

我想輸入一個數據框到粘貼中,我想粘貼來對待它,就好像我已經單獨輸入了該數據框的列一樣。我想這樣做的原因是因爲我不確定我的數據框有多少列。這裏有2個,但我想要一個通用的解決方案來處理任意數量的列。數據框的粘貼方法

我希望的輸出是test1paste在下面的代碼。但我想不必明確提及這些列。我的apply嘗試可以理解的失敗,因爲它在列上單獨行事,但我認爲它通過我正在尋找的解決方案。

> test1 <- 
+ structure(c(42.71, 41.69, 46.95, 48.85, 45.26, 44.71, 43.71, 
+ 42.69, 47.95, 49.85, 46.26, 45.71), .Dim = c(6L, 2L)) 
> 
> test1paste <- paste(test1[,1],test1[,2], sep = "&") 
> test1paste 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
> 
> apply(test1,MARGIN=2,paste,sep="&") 
    [,1] [,2] 
[1,] "42.71" "43.71" 
[2,] "41.69" "42.69" 
[3,] "46.95" "47.95" 
[4,] "48.85" "49.85" 
[5,] "45.26" "46.26" 
[6,] "44.71" "45.71" 

任何想法?

謝謝!

+0

這與LaTeX有什麼關係? –

+0

@羅曼是的,你猜對了!我沒有使用'xtable',因爲我想讓標準錯誤在圓括號內的估計值之下。 –

+0

你讀我像一本打開的書。 :) –

回答

7

如何:

> apply(test1,1,paste,collapse="&") 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
+0

謝謝,這正是我需要的。 –

8

如果你的 「數據框」 實際上是一個data.frame(而不是matrix在你的例子),你可以直接使用do.call

testdf <- as.data.frame(test1) 
do.call(paste, c(testdf, sep="&")) 

這依賴關於data.frame是榮耀的事實listdo.call接受參數列表。我只是將sep參數附加到列表中...

小提示但:如果任何列名稱是「sep」或「崩潰」,您可能會遇到麻煩。刪除列名將有助於在這種情況下:

do.call(paste, c(unname(testdf), sep="&")) 
+0

謝謝!我需要學習'do.call',因爲它看起來非常有用。我很抱歉使用矩陣作爲示例,而沒有明確表達哪一個我感興趣。感謝您的細心解決方案。 –