我有一个数据框,看起来像这样
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与我指定的列表中的一个值相同,但它没有,如果有人是善意的解释为什么这不是正确的思考方式那将是伟大的,第二,你能告诉我代码正确地完成。非常感谢提前
答案 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,所以这种情况永远不会发生。如果你做了类似{ p>
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
应该做你想做的事。