2011-11-02 54 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',因为它看起来非常有用。我很抱歉使用矩阵作为示例,而没有明确表达哪一个我感兴趣。感谢您的细心解决方案。 –