You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助完善R语言中基于因子水平交互矩阵的数据筛选函数

基于因子水平交互矩阵提取数据的R函数优化求助

正在开发一个R函数,用于基于因子水平交互矩阵从数据框中提取数据。函数输入包括:

  • 目标数据框
  • 由0和1组成、主对角线对称的因子水平交互矩阵(行列名为因子水平)
  • 因子数据所在的列编号

目前尝试了多种常规方法,但无法在筛选后的数据中保留因子水平的交互结构,需要帮助完善该函数。


因子水平交互矩阵

structure(c(1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
1, 1, 1, 0, 0, 0, 1, 1), dim = c(5L, 5L), dimnames = list(c("15", 
"20", "30", "40", "50"), c("15", "20", "30", "40", "50")))

数据框示例

structure(list(NumObr = structure(1:6, levels =     c("1",     "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",     "15", 
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25",     "26", 
"27", "28", "29", "30", "31", "32", "33", "34", "35", "36",     "37", 
"38", "39", "40", "41", "42", "43", "44", "45", "46", "47",     "48", 
"49", "50", "51", "52", "53", "54", "55", "56", "57", "58",     "59", 
"60", "61", "62", "63", "64", "65", "66", "67", "68", "69",     "70", 
"71", "72", "73", "74", "75", "76", "77", "78", "79", "80",     "81", 
"82", "83", "84", "85", "86", "87", "88", "89", "90", "91",     "92", 
"93", "94", "95", "96", "97", "98", "99", "100", "101",     "102", 
"103", "104", "105", "106", "107", "108", "109", "110",     "111", 
"112", "113", "114", "115", "116", "117", "118", "119",     "120", 
"121", "122", "123", "124", "125", "126", "127", "128",     "129", 
"130", "131", "132", "133", "134", "135", "136", "137",     "138", 
"139", "140", "141", "142", "143", "144", "145", "146",     "147", 
"148", "149", "150", "151", "152", "153", "154", "155",     "156", 
"157", "158", "159", "160", "161", "162", "163", "164",     "165", 
"166", "167", "168", "169", "170", "171", "172", "173",     "174", 
"175", "176", "177", "178", "179", "180", "181", "182",     "183", 
"184", "185", "186", "187", "188", "189", "190", "191",     "192", 
"193", "194", "195", "196", "197", "198", "199", "200",     "201", 
"202", "203", "204", "205", "206", "207", "208", "209",     "210", 
"211", "212", "213", "214", "215"), class = "factor"),     RastvPoly = c(20L, 
20L, 20L, 20L, 20L, 20L), ModUpr = c(207.9995904,     213.9623982, 
202.6860729, 202.1958851, 195.1508638, 204.9938721), ForsMax     = c(1517.935303, 
1529.544189, 1502.401001, 1495.139526, 1521.255737,     1498.248901
), PredProch = c(3415.354431, 3441.474426, 3380.402252,     3364.063934, 
3422.825409, 3371.060028), dLmax = c(1.440741164,     1.459018333, 
1.44097243, 1.435998338, 1.492951597, 1.435195548), LenObr =     c(236L, 
236L, 236L, 236L, 236L, 236L), Weight = c(261L, 263L, 267L,     249L, 
264L, 266L), ConcVol = c(72.33716475, 71.78707224,     70.71161049, 
75.82329317, 71.51515152, 70.97744361), RastvPolyF =     structure(c(2L, 
2L, 2L, 2L, 2L, 2L), levels = c("15", "20", "30", "40",     "50"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

现有代码

numFactor <- function(dataAnaliz){
  nameCol <- names(dataAnaliz)
  numName <- length(nameCol)
  numF <- c()
  for (i in seq(1,numName,1)) {
    if(class(dataAnaliz[,i])=="factor"){
      numF <- c(numF,i)
    }else{
      next
    }
  }
  return(numF)
}
numPredictor <- function(dataAnaliz){
  nameCol <- names(dataAnaliz)
  numName <- length(nameCol)
  numP <- c()
  for (i in seq(1,numName,1)) {
    if(class(dataAnaliz[,i])=="numeric"){
      numP <- c(numP,i)
    }else{
      next
    }
  }
  return(numP)
}

netFactor <- function(dataAnaliz, numF, numP, alpha){
  levFactor <- levels(dataAnaliz[,numF])
  pMatrix<-matrix(rep(0,length(levFactor)^2),ncol = length(levFactor),nrow = length(levFactor))
  colnames(pMatrix) <- levFactor
  rownames(pMatrix) <- levFactor
  k<-1
  for (i in levFactor) {
    m<-1
    for (j in levFactor) {
      test<- t.test(dataAnaliz[dataAnaliz[,numF]==i, numP],dataAnaliz[dataAnaliz[,numF]==j, numP], correct=FALSE)$p.value
      test <- p.adjust(test, method = "bonferroni",n=length(levFactor))
      if(test>=alpha){
        pMatrix[j,i]<-1
      }else{
        pMatrix[j,i]<-0
      }
      m<-m+1
    }
    k<-k+1
  }
  return(pMatrix)
}

dataSelect <-function(dataAnaliz,netF, numF){
    conFrame <- data.frame(as.table(netF))
    conFrameOne<-conFrame[(conFrame$Freq==1)&(conFrame$Var1!=conFrame$Var2),]
    varCol1 <- conFrameOne$Var1
    varCol2 <- conFrameOne$Var2
    vec<- c()
    for (i in varCol2) {
      vec_1 <-c()
      for (j in varCol1) {
        if((length(conFrameOne[conFrameOne$Var1==j&conFrameOne$Var2==i,]$Freq)!=0)&(i!=j)){
          vec_1 <- c(vec_1,i,j)
        }else{
          vec_1 <- c(vec_1,"|","|")
        }
      }
      vec<-rbind(vec,vec_1)
    }
    
    newVec <- c()
    numRow<- nrow(vec)
    for (i in seq(1,numRow-1,1)) {
      if(!identical(vec[i+1,], vec[i,])){
        newVec<-rbind(newVec,vec[i+1,])
      }
    }
    
    print(newVec)
    conFrameZero <- conFrame[conFrame$Freq==0,]
    levCFZ <- levels(conFrameZero$Var1)
    for ( i in levCFZ) {
      if(length(conFrameZero[conFrameZero$Var2==i,]$Var2)==(length(levCFZ)-1)){
        #print(dataAnaliz[dataAnaliz[,numF]==i,])
      }
    }
    
  }
  print(numP<-numPredictor(newDataMISIS))
  print(nf<-numFactor(newDataMISIS))
  print(netF<-netFactor(newDataMISIS,numF = nf[2], numP[4], 0.05))
  
  dataSelect(newDataMISIS,netF,nf[2])

内容的提问来源于stack exchange,提问作者n_nikitin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:59:51