根据R中的其他变量分配变量值

时间:2014-06-06 01:48:59

标签: r variable-assignment subset

我有一个数据框,看起来像这样

   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

我想要做的是根据trap.number的值填写变量dist.to.forest的值。我可以使用

一次完成这个
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与我指定的列表中的一个值相同,但它没有,如果有人是善意的解释为什么这不是正确的思考方式那将是伟大的,第二,你能告诉我代码正确地完成。非常感谢提前

1 个答案:

答案 0 :(得分:0)

首先,零在这种情况下不会被回收,因为你指定零的东西最多可以有1:

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

data1$dist.to.forest等于向量dat1$trap.number时,正在说“将0分配给c(4851, 4873, 4881, 4896, 4915)。由于dat1$trap.number的长度为1,所以这种情况永远不会发生。如果你做了类似

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

然后,对于每个情况,方括号中的条件为真,如果有的话,0确实会被回收。

正如@RichardScriven的评论中所指出的,您可以创建一个逻辑向量来确定trap.number是否采用任何值c(4851, 4873, 4881, 4896, 4915)

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

应该做你想做的事。