2014-06-06 127 views
0

我有一個數據幀以外的變量,看起來像這樣基於R中

site trap.number species dist.to.forest 
1 1  5850      NA 
2 1  4851 bridelia    0 
3 1  4852      NA 
4 1  4853      NA 
5 1  4854      NA 
6 1  4855      NA 

我想怎麼辦分配變量值填寫值取決於變量dist.to.forest trap.number的值。我可以用

dat1$dist.to.forest[dat1$trap.number == 4851]<- 0 

做一次這個人,但也有許多許多的陷阱是從森林0米,和許多許多的陷阱是10個meteres等,所以我想,以填補他們都在迅速我知道的陷阱數量和距離,我試圖用這樣的:

dat1$dist.to.forest[dat1$trap.number == c(4851, 4873, 4881, 4896, 4915)] <- 0 

雖然陷阱號碼的實際名單是更長的時間,我只是縮短在這裏以適合屏幕,但有大約長對象的錯誤不是較短對象的倍數。

所以我有兩個問題,如果有人願意回答,第一,在我對(有限)R的理解,我認爲數字0會'回收'填補dist.to.forest的每一行,其中trap.number的值與我指定的列表中的一個值相同,但它沒有,如果有人善意解釋爲什麼這不是正確的方式來思考它會很好,其次,你可以告訴我代碼正確執行。提前非常感謝

+2

嘗試'%in%'而不是'=='。雖然它仍然是一個紅色的信息,但這是一個警告,而不是一個錯誤。 –

+0

@RichardScriven謝謝您的回覆 – alexk

回答

0

首先,零沒有得到在這種情況下回收,因爲要分配爲零的事情可能有至多長度爲1:

dat1$dist.to.forest[dat1$trap.number == c(4851, 4873, 4881, 4896, 4915)] <- 0 

是說「0賦給data1$dist.to.forestdat1$trap.number等於矢量c(4851, 4873, 4881, 4896, 4915)。由於dat1$trap.number長度爲1,這永遠不會發生。如果你不喜歡的東西

dat1$dist.to.forest[dat1$trap.number == 4851] <- 0 

然後0的確會被回收,對於每一個情形,其中在方括號中的條件爲t如果有的話。

正如@RichardScriven的評論指出的那樣,你可以創建確定是否trap.number採取任何值c(4851, 4873, 4881, 4896, 4915)

dat1$dist.to.forest[dat1$trap.number %in% c(4851, 4873, 4881, 4896, 4915)] <- 0 

應該做你想要什麼邏輯載體。

+0

感謝這個解釋它非常好,我現在明白我的想法和代碼中的錯誤。非常感激。乾杯! – alexk