【问题标题】:Paste columns of two data frames粘贴两个数据框的列
【发布时间】:2011-11-03 01:21:44
【问题描述】:

我发现自己有时想将来自不同数据框(表、矩阵或其他)的列粘贴在一起。例如,我有一张均值表和一张 stan devs 表。我希望将两者与 sd 一起粘贴在一组括号中以进行乳胶打印。我怀疑有一个友好的 plyr 解决方案,但想不出如何处理两个数据帧(我尝试将数据帧存储为列表并使用 ldply 但这是我第一次尝试使用 list plyr 函数,但它在火焰中失败了。

提前谢谢你。

#=========
#fake data
#=========
x<-mtcars[1:3,1:3]
y<-mtcars[1:3,8:10]


#==========================
#A column pasting function
#==========================
meansd<-function(x, y){
x<-round(x, dig=2)
y<-round(y, dig=2)
paste(x, "(", y, ")", sep="")
}

这就是我所知道的。

期望的结果 不需要列名。我不在乎返回是矩阵还是数据框。

16.46(0)  0(1)  1(4)
17.02(0)  0(1)  1(4)
18.61(1)  1(1)  1(4)

【问题讨论】:

  • 如果您希望使用它在 Latex 中生成回归汇总表,请查看 memisc 包中的 mtable。这是一个非常灵活的功能,让您可以轻松地以多种格式输出回归输出。
  • @Ramnath 感谢您的评论。我最近才熟悉这个包。它做了很多我想要的乳胶输出,但仍有一些事情我需要灵活性来处理 mtable 不能做的一些事情。
  • 你要去xtable得到的data.frame吗?
  • 您能否更清楚地指定您正在查看的输出格式是什么。 mtable 非常灵活,它不能做一些标准的事情让我感到震惊:)
  • @gsk 是的,我将 xtable 与解决方案一起使用(#3 解决方案 [yours] 是我最喜欢的解决方案;基本包且简单),但我会对其进行一些调整并制作它是一个采用手段和 sd 表并生成可发布手段表的功能。感谢您的解决方案。

标签: r plyr


【解决方案1】:

mapply 怎么样?

x <- mtcars[1:3,1:3]
y <- mtcars[1:3,8:10]

mypaste <- function(x,y) paste(x, "(", y, ")", sep="")

mapply(mypaste, x,y)

     mpg       cyl    disp    
[1,] "21(0)"   "6(1)" "160(4)"
[2,] "21(0)"   "6(1)" "160(4)"
[3,] "22.8(1)" "4(1)" "108(4)"

【讨论】:

  • 谢谢!我也喜欢你的ldply 解决方案。类似的味道,只是用小哈德利锤搅拌。
  • 我最喜欢的解决方案。谢谢你。简单而美丽。很有创意的想法。
【解决方案2】:

这是一种使用plyr的方法

t(ldply(1:NCOL(x), function(i) meansd(x[,i], y[,i])))

【讨论】:

    【解决方案3】:

    这是您编辑的函数以循环并粘贴每一列。这给出了您想要的结果,但可能有更聪明的方法来做到这一点。

    meansd<-function(x, y){
        x<-round(x, digits = 2)
        y<-round(y, digits = 2)
        out <- matrix(ncol = dim(x)[1], nrow = dim(x)[2])
        for(i in 1:dim(x)[1])
        {
            out[i, ] <-paste(x[i, ], "(", y[i, ], ")", sep="")
        }
        return(out)
    }
    

    【讨论】:

    • 瑞恩感谢您的回复。效果很好。如果可能的话,我希望得到一个非循环的答案(我确定它只是不知道如何)。
    • 这是符合我的规范的第一个答案,所以我给它接受的答案检查。我希望我能检查这三个中的每一个。
    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2011-09-18
    相关资源
    最近更新 更多