请查看虚假数据集.
library(data.table)
library(MASS)
n=5000
DT = data.table(
grp=1:n,
name=as.character(as.hexmode(1:n)),
x= sample(c(1:400),n,replace = TRUE)
)
setkey(DT,grp)
UIDlist <- unique(DT[,grp])
IDnamelist <- paste0("V", 1 : length(UIDlist), sep = "")
test <- DT[, (IDnamelist):=lapply(UIDlist,function(x) grp ==x)][, V5000:= NULL]
Run Code Online (Sandbox Code Playgroud)
我有一个data.table,其中有4列,"grp","Name","x","y".然后我在"grp"中的每个级别添加虚拟.然后我需要在MASS包中使用glm.nb运行回归.
首先我尝试了这个
SumResult <- glm.nb(x ~ factor(uid), data = test)
Run Code Online (Sandbox Code Playgroud)
但是当添加假人时,我们必须注意到当"grp"中有N级时,我们会添加N-1个假人.所以这个方法就我认为不合适.
所以我尝试了这个:
SumResult <- glm.nb( x ~ V1 + V2 + V3 + V4 + .....+ V4999 , data = test)
Run Code Online (Sandbox Code Playgroud)
编写所有V1,V2,... V4999进行回归是愚蠢的.
有代码可以达到目的吗?
谢谢
您可以尝试通过字符串操作创建公式对象
formula <- as.formula(paste0("x ~ ", paste(names(test)[-(1:3)], collapse = " + ")))
sumresult <- glm.nb(formula, data = test)
Run Code Online (Sandbox Code Playgroud)
您还可以使用@BrandonBertelsen 的更具可读性的代码
glm.nb(x ~ ., data = test[-c(1:3)])
Run Code Online (Sandbox Code Playgroud)