r - 如何将矩阵添加到 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
然后创建额外的行来输入分布。然后输出应如下所示:
解决方案
您真正想要做的是将两个 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)
推荐阅读
- python - 除以更大的减法值
- c# - 我能知道为什么 Visual Studio 2017 存档不同于 Visual Studio 2019
- ruby-on-rails - 两个字符串数组中的Ruby差异并传递给方法
- css - Material UI 如何证明 FormControlLabel 中的内容是合理的
- python-3.x - python - 如何在python中完成Airflow DAG中的另外两个任务时触发任务?
- node.js - 在 Localstack 中调试 Node lambda
- macos - Applescript for Reminders + Mail 链接在一起
- javascript - 了解如何使用 Node.JS 获取
- java - 我应该在这里使用平面地图还是键值列表地图
- python - Flask + Post + Get + 文件夹结构