R从一个变量创建矩阵

R从一个变量创建矩阵,r,variables,matrix,vector,R,Variables,Matrix,Vector,我想从数据框中的一个变量创建一个矩阵。矩阵的每个单元格将按如下方式填充: sum(Rin1,Rin2)/sum(Rin),...,sum(Rin1,Rin28)/sum(Rin) sum(Rin2,Rin3)/sum(Rin),...,sum(Rin2,Rin28)/sum(Rin) 我使用此脚本,但它对我无效: # Keep one column that has proportion of Rin=Tdin/User.in df.in <- df[,c(5)] # Create m

我想从数据框中的一个变量创建一个矩阵。矩阵的每个单元格将按如下方式填充:

sum(Rin1,Rin2)/sum(Rin),...,sum(Rin1,Rin28)/sum(Rin)
sum(Rin2,Rin3)/sum(Rin),...,sum(Rin2,Rin28)/sum(Rin)
我使用此脚本,但它对我无效:

# Keep one column that has proportion of Rin=Tdin/User.in 
df.in <- df[,c(5)]
# Create matrix for rows' combination
a<-t(combn(28,2))
# Create empty matrix according length of rows
output <- matrix ('',28,28)
# Fill matrix with sum of rows divide sum of Rin 
for (i in 1:nrow(a)) {
  # I came up with this line from my previous work! 
  output[cbind(a[i,][1],a[i,][2])] <-unlist(intersect(df.in[a[i,]][1],df.in[a[i,]][2]))
}
#保留一列,该列的Rin=Tdin/User.in比例为

df.in这就是你想要做的吗

out <- matrix(NA, nrow = dim(df)[1], ncol = dim(df)[1])

sum <- sum(df$Rin)
for (t1 in 1:dim(df)[1]){
  for (t2 in 1:dim(df)[1]){
    out[t1, t2] <- sum(df$Rin[t1], df$Rin[t2])/sum
  }
}

out Hi@PejoPhylo。我检查了你的输出,但没有给出正确的数字。例如矩阵[3,2]中的数字为87.80912,但应为0.00330。Rin中的第2行为17.5792350,Rin中的第3行为70.2298851,因此矩阵[3,2]中这两行的交点应为[(70.22+17.57)/26569.17]=0.0033。我希望这个解释能让你明白。糟糕的是,我忘了把每个条目除以总和。我编辑了我的答案。现在应该是正确的了。你想使用
matrix(NA_real_uu…)
而不仅仅是
NA
来避免该矩阵的完整副本。参见
外部(df$Rin,df$Rin,“+”)/sum(df$Rin)
(df$Rin+matrix(df$Rin,nr=length(df$Rin),nc=length(df$Rin),byrow=TRUE))/sum(df$Rin)
out <- matrix(NA, nrow = dim(df)[1], ncol = dim(df)[1])

sum <- sum(df$Rin)
for (t1 in 1:dim(df)[1]){
  for (t2 in 1:dim(df)[1]){
    out[t1, t2] <- sum(df$Rin[t1], df$Rin[t2])/sum
  }
}