2013-05-01 106 views
1

我試圖使用數字值來編碼週末和星期幾,例如「星期一」,「星期二」,...「星期五」= 0和「星期六」/「星期日」= 1。目前有如下的數據:使用邏輯運算符分配值

head(bike.d)

Day Day.Code 
    Sunday  4 
    Sunday  4 
    Sunday  4 
    Sunday  4 
    Sunday  4 
    Sunday  4 

尾(bike.d)

Day Day.Code 
    Saturday 3 
    Saturday 3 
    Saturday 3 
    Saturday 3 
    Saturday 3 
    Saturday 3 

我已編碼數值使用日柱:

Day.Code = as.numeric(bike.d$Day)

其中週五= 1,星期一= 2,星期六= 3,星期日= 4,星期四= 5,週二= 6,週三= 7

我曾嘗試使用邏輯運算符與分配的二進制值平日= 0和週末= 1。我曾嘗試以下參數的變化,但我得到了以下的輸出:

bike.d[,2 == 3|4]=1 

head(bike.d) 

    Day Day.Code 
    1   1 
    1   1 
    1   1 
    1   1 
    1   1 
    1   1 

tail(bike.d)

Day Day.Code 
    1   1 
    1   1 
    1   1 
    1   1 
    1   1 
    1   1 

有沒有一種方法,我可以創造這樣的說法,使文本「日」列中的值爲保留嗎?那麼二進制代碼是在Day.code列中輸入還是在新列中輸入?

謝謝你的幫助!

+0

可以讓你的例子可以重現? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2013-05-01 15:40:47

+0

看看'merge',它會讓你的生活更輕鬆。 – flodel 2013-05-01 16:32:04

回答

1

一個ifelse應該正是你需要在這裏什麼(有很多其他方式來做到這一點):

bike.d$Weekend <- ifelse(bike.d$Day.Code == 3 | bike.d$Day.Code == 4 , 1 , 0) 

一個例子:

bike.d<- data.frame(Day = rep(weekdays(Sys.Date()+1:7) , each = 2) , Day.Code = rep(1:7 , each = 2)) 
bike.d$Weekend <- ifelse(bike.d$Day.Code == 3 | bike.d$Day.Code == 4 , 1 , 0) 
bike.d 
#  Day Day.Code Weekend 
#1 Thursday  1  0 
#2 Thursday  1  0 
#3  Friday  2  0 
#4  Friday  2  0 
#5 Saturday  3  1 
#6 Saturday  3  1 
#7  Sunday  4  1 
#8  Sunday  4  1 
#9  Monday  5  0 
#10 Monday  5  0 
#11 Tuesday  6  0 
#12 Tuesday  6  0 
#13 Wednesday  7  0 
#14 Wednesday  7  0 
+0

感謝您的輸入,但我一直收到以下錯誤: 錯誤在$ < - 。data.frame('* tmp *',「Weekend」,value = logical(0)): 替換爲0行,數據有74847 – user2339597 2013-05-01 16:06:21

+0

@ user2339597如果沒有您運行的命令和數據結構,這並不意味着很多。請在R'dput(head(bike.d,n = 30))'中運行此命令的輸出來更新您的問題。 – 2013-05-01 16:09:00