【问题标题】:How to add a matrix to a data.frame?如何将矩阵添加到 data.frame?
【发布时间】:2019-06-20 09:55:24
【问题描述】:

下面是一些虚拟数据。

假设我有一个数据框

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")

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

【问题讨论】:

    标签: r dataframe matrix


    【解决方案1】:

    您真正想要做的是通过Destination 合并两个data.frames。因此,您首先需要将第二个 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)
    

    【讨论】:

      【解决方案2】:

      一种可能性:如果您乐于使用 dplyr 包,那么它包含 SQL 样式的连接函数。您可能需要该包中的left_join 函数,它允许您使用by 参数映射列。这是连接两个类似表的结构的简单方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多