如何排除R data.table列,然后为它们赋值

如何排除R data.table列,然后为它们赋值,r,function,data.table,R,Function,Data.table,目前,我正在尝试使用以下数据集中的depmixS4库在R中使用潜在类分析(LCA): Subject category f1 f2 f3 f4 02retY 73 1 1 1 1 02retY 128 1 0 1 0 03CzUL 5 0 0 0 0 03CzUL 73

目前,我正在尝试使用以下数据集中的
depmixS4
库在R中使用潜在类分析(LCA):

Subject     category       f1   f2  f3  f4  
02retY      73             1    1   1   1   
02retY      128            1    0   1   0   
03CzUL        5            0    0   0   0   
03CzUL       73            1    0   0   0   
03CzUL      98             1    1   1   1   
其中每个
f_i
都是一个过滤器。我在
data.table
中使用了以下两个函数,以便将每个类别分为两类:

LCA <- function(dt,y) {
  mod1 <- mix(list(f1 ~ 1, f2 ~ 1, f3 ~ 1, f4 ~ 1), 
              data = dt, 
              nstates = 2,
              family = list(multinomial("identity"), multinomial("identity"), multinomial("identity"), multinomial("identity")),
              respstart=runif(16))
  fmod1 <- fit(mod1, verbose=FALSE)
  posterior.states <- depmixS4::posterior(fmod1)
  return(posterior.states$state)
}

UsablePosCategory <- function(DataTable) {
  DataTable[!is.na(f1) & !is.na(f2) & !is.na(f3) &!is.na(amplitude.f4),
                              cluster.usable := LCA(.SD, x), 
                              by = c("week", "pc" ),
                              .SDcols = f1:f4]
  return(DataTable)
}

LCA这里有一个选项。第一行代码标识具有2个以上唯一值的列。然后,下一行创建由这些列组成的公式列表

LCA <- function(dt) {
    cols <- names(dt)[dt[, sapply(.SD, function(x) uniqueN(x) > 1L)]]
    fml <- lapply(cols, function(x) as.formula(paste0(cols, " ~ 1")))
    mod1 <- depmixS4::mix(fml, 
        data = dt, 
        nstates = 2,
        family = replicate(length(cols), multinomial("identity"), simplify=FALSE),
        respstart=runif(16))
    fmod1 <- fit(mod1, verbose=FALSE)
    posterior.states <- depmixS4::posterior(fmod1)
    return(posterior.states$state)
}

LCA非常感谢,伙计,在看到你的代码之前,我无法用优雅的方式解决它