gpt4 book ai didi

r - 将R中的两个数据帧逐个元素粘贴在一起

转载 作者:行者123 更新时间:2023-12-04 13:07:33 26 4
gpt4 key购买 nike

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

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

有关如何处理此问题的任何建议?我包括了虚拟输入数据(datMean和datSE)和所需的输出(datNew)。我的真实数据帧大小约为10行乘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="-")

编辑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中。

关于r - 将R中的两个数据帧逐个元素粘贴在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6408016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com