如何排除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非常感谢,伙计,在看到你的代码之前,我无法用优雅的方式解决它