我正在运行一个线性混合模型,其中包含来自相关个人的数据和来自同一个人的多个样本。我有一个血缘关系矩阵,每个人有一个血缘关系ID。亲属关系is与模型正在分析的分析is不同。我需要创建一个血缘关系矩阵,每个分析ID有一个行/列,而不是每个血亲ID有一个行/列。
key = data.frame(assay_id = c("aid_1","aid_2","aid_3","aid_4","aid_5","aid_6"), kinship_id = c("kid_1","kid_2","kid_2","kid_3","kid_3","kid_4"))
key
start_kin = data.frame(kid_1 = c(1,0.25,0,0.5), kid_2= c(0.25,1,0,0.5), kid_3 = c(0,0,1,0.25), kid_4= c(0.5,0.5,0.25,1) )
rownames(start_kin) =c("kid_1","kid_2","kid_3","kid_4")
start_kin
intermediate_kin = start_kin
intermediate_kin$kid_2a = intermediate_kin$kid_2
intermediate_kin$kid_3a = intermediate_kin$kid_3
intermediate_kin["kid_2a",] = intermediate_kin["kid_2",]
intermediate_kin["kid_3a",] = intermediate_kin["kid_3",]
intermediate_kin
final_kin = intermediate_kin
rownames(final_kin) = c("aid_1","aid_2","aid_4","aid_6","aid_3","aid_5")
names(final_kin) = c("aid_1","aid_2","aid_4","aid_6","aid_3","aid_5")
final_kin发布于 2021-07-01 13:05:33
根据你的描述,我不确定你到底想做什么。这是一个基于我的猜测的代码示例。在这里,每个亲人都有3次化验。
kin <- letters[1:4]
assay <- 1:3
dat <- expand.grid(kin = kin, assay = assay)
dat <- apply(dat, 1, paste0, collapse = "-")
n <- length(dat)
m <- matrix(rep(0, n * n), nrow = n)
rownames(m) <- dat
colnames(m) <- dat
m
# a-1 b-1 c-1 d-1 a-2 b-2 c-2 d-2 a-3 b-3 c-3 d-3
# a-1 0 0 0 0 0 0 0 0 0 0 0 0
# b-1 0 0 0 0 0 0 0 0 0 0 0 0
# c-1 0 0 0 0 0 0 0 0 0 0 0 0
# d-1 0 0 0 0 0 0 0 0 0 0 0 0
# a-2 0 0 0 0 0 0 0 0 0 0 0 0
# b-2 0 0 0 0 0 0 0 0 0 0 0 0
# c-2 0 0 0 0 0 0 0 0 0 0 0 0
# d-2 0 0 0 0 0 0 0 0 0 0 0 0
# a-3 0 0 0 0 0 0 0 0 0 0 0 0
# b-3 0 0 0 0 0 0 0 0 0 0 0 0
# c-3 0 0 0 0 0 0 0 0 0 0 0 0
# d-3 0 0 0 0 0 0 0 0 0 0 0 0https://stackoverflow.com/questions/68204244
复制相似问题