2016-07-15 63 views
1

我想根據一個因子是否小於2個級別從公式中刪除一個項目。從小於兩個級別的公式中刪除因子

我的設置是我想爲不同的數據子集運行大量相同的logit模型。問題是,對於某些子集,沒有一些因素可能只有1個值。

下面是一個例子:

depvar <- sample(0:1, 100, replace=T) 
bin1 <- rep(1, 100) 
cont1 <- rnorm(100) 
df <- data.frame(depvar=depvar, bin1=bin1, cont1=cont1) 
formla <- as.formula("depvar ~ bin1 + cont1") 
logit.reg <- glm(formla, data=df, family=binomial(link=logit)) 

我想是能夠以某種方式從式下降bin1自動 時只需要一個值。

+0

認沽像這樣'as.formula(paste0(「depvar〜」,if(length(levels(bin1)))「bin1 +」else「」,「cont1」))''。請注意,這裏'bin1'是一個連續變量,因此沒有水平,但是你可以通過'bin1 = as.factor(bin1)'來改變它。 – FisherDisinformation

回答

1

我看來,像一個簡單的if/else應該足夠了:

if(length(unique(df$bin)) > 1) { 
    formla <- as.formula("depvar ~ bin1 + cont1") 
} else { 
    formla <- as.formula("depvar ~ cont1") 
} 

注意BIN1是不是一個因素在你的例子(可以用as.factor()它迫使一個雖然)

+0

heh基本上是一樣的東西,但在5行 – FisherDisinformation