2013-11-21 32 views
2

我在R中運行GLM,但需要嘗試一些沒有因子Year一級的模型。如何子集()與因素?

這就像:

Year<-as.factor(c(1996,1997,1998,1999,2000)) 
Shr<-as.numeric(c(1,32,1,50,42)) 
#... and other variables. 

如何 '排除',只有1998年從我的模型? 我需要從所有其他變量中取得整行,否則GLM由於行數的差異而不能運行。

+0

你的變量是否在data.frame中(正如他們應該那樣)? – Roland

+0

是的。插入所有變量後,我把它們放在所有 user2945823

回答

3

更容易,你可以使用的glm()subset參數:

glm(...,data=all,subset=(Year != 1998)) 
+0

謝謝!這種方式很好。 – user2945823

3

假設你有一個名爲 data.frame你的數據,你可以使用

da.fr2<-da.fr[da.fr$Year!=1998,] 

da.fr2$Year<-droplevels(da.fr2$Year) 

第一線,使新data.frame沒有任何的1998年的數據。第二行將刪除1998年作爲年的一個因素,因爲它不再在數據集中。

+0

+1對於'droplevels()' –

+0

謝謝你的幫助!這種方式也起作用。 – user2945823

+0

沒問題 - 如果您使用沒有簡單子集選項的函數進行分析 - 這是一個好方法。 –

1
Year<-as.factor(c(1996,1997,1998,1999,2000)) 
Shr<-as.numeric(c(1,32,1,50,42)) 

dat <- data.frame(Year=Year, Shr = Shr) # your data 
#> dat 
# Year Shr 
#1 1996 1 
#2 1997 32 
#3 1998 1 
#4 1999 50 
#5 2000 42 

> levels(dat$Year) 
#[1] "1996" "1997" "1998" "1999" "2000" 

取決於你想要達到你所能:

dat2 <- dat[!(dat$Year %in% "1998") , ] # remove rows with 1998 
#> dat2 
# Year Shr 
#1 1996 1 
#2 1997 32 
#4 1999 50 
#5 2000 42 

levels(dat2$Year) 
#[1] "1996" "1997" "1998" "1999" "2000" # the 1998 level remains 

,但你還可以:

dat2$Year <- factor(dat2$Year) # also remove the level if you want 
levels(dat2$Year) 
#[1] "1996" "1997" "1999" "2000" 
+0

謝謝!我會牢記其他分析。真的很有幫助。 – user2945823