2013-08-22 227 views
0

這是我的數據看起來像:創建虛擬變量

  Attribute  Time  V1 V2 V3 V4 
1 pmEulRlcUserPacketThp 2013-04-30 12 51 34 17 
2 pmEulRlcUserPacketThp 2013-04-30 84 28 17 10 
3 pmEulRlcUserPacketThp 2013-04-30 11 43 28 15 
4 pmEulRlcUserPacketThp 2013-04-30 80 26 17 91 
5 pmEulRlcUserPacketThp 2013-04-26 10 41 25 13 
6 pmEulRlcUserPacketThp 2013-04-25 97 35 23 12 

我想創建一個虛擬列「T」,這造成當日期是例如類似於相同的值,1 2013-04- 30日,2日爲26-04-2013,3日爲25-04-2013。其龐大的數據,這將有助於減少手工工作量。下面我需要給出的數據是:

  Attribute  Time  t V1 V2 V3 V4 
1 pmEulRlcUserPacketThp 2013-04-30 1 12 51 34 17 
2 pmEulRlcUserPacketThp 2013-04-30 1 84 28 17 10 
3 pmEulRlcUserPacketThp 2013-04-30 1 11 43 28 15 
4 pmEulRlcUserPacketThp 2013-04-30 1 80 26 17 91 
5 pmEulRlcUserPacketThp 2013-04-26 2 10 41 25 13 
6 pmEulRlcUserPacketThp 2013-04-25 3 97 35 23 12 
+0

你爲什麼需要這個變量?在時間列上使用'as.factor'會給你數字。 – zx8754

回答

2

假設你data.frame被稱爲dfr,嘗試:

dfr$t <- as.numeric(as.factor(dfr$Time)) 
0

我不能告訴如果你正在尋找的只是as.factor或者如果你需要一些那種連續日期的累計數,在這種情況下,你可以做到這一點的?

df$t <- cumsum(c(1 , ! head(df$Time,-1) == tail(df$Time,-1))) 

#    Attribute  Time V1 V2 V3 V4 t 
#1 pmEulRlcUserPacketThp 2013-04-30 12 51 34 17 1 
#2 pmEulRlcUserPacketThp 2013-04-30 84 28 17 10 1 
#3 pmEulRlcUserPacketThp 2013-04-30 11 43 28 15 1 
#4 pmEulRlcUserPacketThp 2013-04-30 80 26 17 91 1 
#5 pmEulRlcUserPacketThp 2013-04-26 10 41 25 13 2 
#6 pmEulRlcUserPacketThp 2013-04-25 97 35 23 12 3 

我們再次比較Time列的連續值彼此看看他們是否一樣。使用!運算符,如果它們相同,則我們得到FALSE,如果它們不同,則爲TRUE。然後我們可以用cumsum這個得出結果(用初始的1開始球的滾動)。