【问题标题】:Creating matrix based on a dataframe and storing weights in matrix cells基于数据框创建矩阵并将权重存储在矩阵单元格中
【发布时间】:2017-12-07 15:37:39
【问题描述】:

我有这个数据框:-

pf = structure(list(Var1 = structure(1:21, .Label = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20", "21"), class = "factor"), Freq = c(101L, 
61L, 84L, 98L, 56L, 222L, 137L, 103L, 136L, 97L, 77L, 110L, 84L, 
88L, 92L, 89L, 86L, 87L, 84L, 71L, 36L), Relative_freq = c(0.0505252626313157, 
0.0305152576288144, 0.0420210105052526, 0.0490245122561281, 0.0280140070035018, 
0.111055527763882, 0.0685342671335668, 0.0515257628814407, 0.0680340170085043, 
0.0485242621310655, 0.0385192596298149, 0.0550275137568784, 0.0420210105052526, 
0.0440220110055028, 0.0460230115057529, 0.0445222611305653, 0.0430215107553777, 
0.0435217608804402, 0.0420210105052526, 0.0355177588794397, 0.0180090045022511
)), .Names = c("Var1", "Freq", "Relative_freq"), row.names = c(NA, 
-21L), class = "data.frame")

现在我想根据这个数据框创建一个矩阵,它将这些 relative_freq 存储为边缘(矩阵单元)权重。

这是代码:-

k=5
PF = matrix(data=NA, nrow=k, ncol=k)

for(i in 1:k){
  for(j in 1:k){
    pf = PageFreq(pf,i,j)
    a = pf[[1]]
    b = pf[[2]]
    PF[i,j] = 2 * a *b/(a + b)

  }
}

这是 PageFreq 函数,我需要对其进行调整才能正常工作:-

PageFreq = function(pf,i,j){

  a = pf %>% filter(Var1 == i) %>% select(Relative_freq);
  b = pf %>% filter(Var1 == j) %>% select(Relative_freq);
  c = list(a,b);
  return (c)

}

请看什么是正确的方式!谢谢

【问题讨论】:

  • 请显示所需的输出。
  • 所以根据演示它的 5*5 矩阵,但实际上它是一个 21*21 矩阵及其第一行数据,如“ [,1] [,2] [,3] [,4] [1 ,] "1 和 1 的谐波平均值" "1 和 2 的谐波平均值" "1 和 3 的谐波平均值" "1 和 4 的谐波平均值" [,5] [1,] "1 和 5 的谐波平均值" "
  • 更新帖子中的信息,而不是评论中的信息。很难读懂你的 cmets。

标签: r matrix dplyr


【解决方案1】:

这是工作代码:-

PageFreq = function(pf,i,j){

  a = pf %>% filter(Var1 == i) %>% select(Relative_freq);
  b = pf %>% filter(Var1 == j) %>% select(Relative_freq);
  a1 = a$Relative_freq
  b1 = b$Relative_freq
  c = list(a1,b1);
  return (c)

}
k = 21
PF = matrix(data=NA, nrow=k, ncol=k)

for(i in 1:k){
  for(j in 1:k){
    pff = PageFreq(pf,i,j)
    a = pff[[1]]
    b = pff[[2]]
    PF[i,j] = 2 * a *b/(a + b)

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 2021-10-13
    • 1970-01-01
    • 2020-03-23
    • 2023-01-20
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多