将两个数据框逐个元素粘贴在一起

2023-11-24

我需要逐个元素粘贴两个数据帧的内容以输入到另一个程序。我有一个平均值数据框和一个平均值标准误差数据框。

我尝试使用 R Paste() 函数,但它似乎无法处理数据框。使用向量时,似乎将第一个向量的所有元素连接到一个字符串中,并将第二个向量的所有元素连接到一个单独的字符串中。相反,我需要将两个数据框中的每个倒数元素连接在一起。

对于如何解决这个问题有什么建议吗?我已经包含了虚拟输入数据(datMean 和 datSE)和我想要的输出(datNew)。我的真实数据框大小约为 10 行 x 150 列。

# means and SEM
datMean <- data.frame(a=rnorm(10, 3), b=rnorm(10, 3), d=rnorm(10, 3))
datSE <- data.frame(a=rnorm(10, 3)/100, b=rnorm(10, 3)/100, d=rnorm(10, 3)/100)

# what the output should look like
# i've chosen some arbitrary values here, and show only the first row. 
datNew <- data.frame(a="2.889-2.926", b="1.342-1.389", d="2.569-2.576")

这个想法是 datNew 中的每个元素都是由 'mean - se' 和 'mean + se' 组成的范围,并用破折号 '-' 分隔。 Paste() 函数可以对一个元素执行此操作,如何在整个数据帧上执行此操作?

paste(datMean[1,1] - datSE[1,1], datMean[1,1] + datSE[1,1], sep="-")

EDIT 1:看了一些答案,我意识到我在问题中遗漏了一些重要的信息。原始数据帧的每一行都被命名,我需要用这些名称重建最终的数据帧。例如:

rownames(datMean) <- LETTERS[1:10]
rownames(datSE) <- LETTERS[1:10]

我需要 datNew 最终再次拥有这 10 个行名。对于某些使用 Melt() 的解决方案来说,这可能会出现问题。


如果您首先转换为矩阵,则根本不需要应用或循环即可完成。

MdatMean <- as.matrix(datMean)
MdatSE <- as.matrix(datSE)
matrix( paste(MdatMean - MdatSE, MdatMean + MdatSE, sep="-"), 
        nrow=nrow(MdatMean), dimnames=dimnames(MdatMean) )

您也可以考虑formatC为了更好的格式化。

lo <- formatC(MdatMean - MdatSE, format="f", digits=3)
hi <- formatC(MdatMean + MdatSE, format="f", digits=3)
matrix( paste(lo, hi, sep="-"), 
        nrow=nrow(MdatMean), dimnames=dimnames(MdatMean) )

如果你想要一个data.frame最后只需将最后一行换行即可as.data.frame.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将两个数据框逐个元素粘贴在一起 的相关文章

随机推荐