首页 > 解决方案 > 如何将矩阵添加到 data.frame?

问题描述

下面是一些虚拟数据。

假设我有一个数据框

df = data.frame(source = c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10",
                       "X11", "X12", "X13", "X14", "X15", "X16", "X17", "X18", "X19", "X110"),
                Destination = c("X3","X5","X17", "X20", "X20","X1", "X2", "X3", "X7", "X10", 
                                "X13","X15","X7", "X1", "X20","X17", "X2", "X3", "X7", "X10"),
                weight = seq(1,1.95,by=0.05))

然后我有一些优势比Destinations X1:X3和相应的标准偏差,我想从每个优势比及其相应的标准偏差中随机抽样 10 次

OR_dat <- c(1.55,1.39,1.77)

sds <- c(0.2925175, 0.4775346, 0.1603566)
n <- 10

normv <- function( n , mean , sd ){
  out <- rnorm( n*length(mean) , mean = mean , sd = sd )
  return( matrix( out , ncol = n , byrow = FALSE ))
}

RR_neighbour_1 <- data.frame(t(normv(n, OR_dat , sds )))
colnames(RR_neighbour_1) <- c("X1",  "X2",  "X3")

我真正想要的是通过查看标题列中的值将矩阵合并到 data.frame 中"Destination",将其与标题为矩阵的列名匹配,RR_neighbour_1然后创建额外的行来输入分布。然后输出应如下所示:

在此处输入图像描述

标签: rdataframematrix

解决方案


您真正想要做的是将两个 data.frames 合并为Destination. 因此,您首先需要将第二个 data.frame ( RR_neighbour_1) 转换为长格式(因此与第一个格式相同,其中不同的目的地是行而不是列)。然后你可以简单地将 data.frames 与merge函数合并。参数all=T将确保添加重复目的地的行。

RR_neighbour_1 <- reshape(RR_neighbour_1,dir="long",varying = list(1:3),
                          timevar = "Destination",
                          times = colnames(RR_neighbour_1),
                          v.names = "RR_neighbour_1")

merge(df, RR_neighbour_1[,-3], all=T)

推荐阅读