假設我有一個持續幾個時段的變量。 就像我擁有一個Ipod的年數一樣。 所以我從2001年到2004年的Ipod第一代,然後在2005年,我得到了Ipod 2等等。所以,我的數據框看起來像:虛擬系列中的第一個新元素
2001 Ipod1
2002 Ipod1
2003 Ipod1
2004 Ipod1
2005 Ipod2
2006 Ipod2
2007 Ipod2
2008 Ipod2
2009 Ipod3
2010 Ipod3
我要的是創建一個虛擬期間時,一個新的變量到達,所以我會得到:
Year Var Dummy
2001 Ipod1 1
2002 Ipod1 0
2003 Ipod1 0
2004 Ipod1 0
2005 Ipod2 1
2006 Ipod2 0
2007 Ipod2 0
2008 Ipod2 0
2009 Ipod3 1
2010 Ipod3 0
到目前爲止,我已經能夠做到這個:
df = structure(list(Year = 2001:2010, Var = structure(c(1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 3L, 3L), .Label = c("Ipod1", "Ipod2", "Ipod3"
), class = "factor")), .Names = c("Year", "Var"), class = "data.frame", row.names = c(NA,
-10L))
df$number.in.group = unlist(lapply(table(df$Var),seq.int))
df$dummy = ifelse(df$number.in.group == 1,1,0)
df$dummy[1]=0
其實我想讓虛擬元素的第一個元素爲零。
我的問題是:有沒有辦法以更好的方式做到這一點?
感謝
該指標變量應該是一個邏輯值,而不是一個號碼,因爲它記錄一個事件是否發生;它不算數。 – 2012-02-03 11:11:59
'lm'(和類似的模型)會將一個邏輯值轉換成一個'factor'。也就是說,具有兩種狀態的分類變量。無論是因素還是數字,係數都是相同的。 – 2012-02-03 13:40:48