【问题标题】:assigning a variable value based on other variable in R [duplicate]基于R中的其他变量分配变量值[重复]
【发布时间】:2014-06-06 01:48:58
【问题描述】:

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

   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 米等的陷阱,所以我想快速将它们全部填满,我知道陷阱的数量和距离,我尝试使用这个:

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

虽然实际的陷阱编号列表要长得多,但我只是在此处将其缩短以适应屏幕,但收到一个错误,即较长的对象不是较短对象的倍数。

所以如果有人愿意回答,我有两个问题,第一个,在我对 R 的(有限)理解中,我认为数字 0 会被“回收”填充到 dist.to.forest 值的每一行trap.number 的值与我指定的列表中的一个值相同,但它没有,如果有人愿意解释为什么这不是考虑它的正确方法,那会很好,其次你能告诉我正确执行此操作的代码。非常感谢提前

【问题讨论】:

  • 尝试%in% 而不是==。虽然它仍然是一条红色消息,但那是警告,而不是错误。
  • @RichardScriven 谢谢你的回复

标签: r variable-assignment subset


【解决方案1】:

首先,在这种情况下,零不会被回收,因为您分配零的东西的长度最多为 1:

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

说“当dat1$trap.number 等于向量c(4851, 4873, 4881, 4896, 4915) 时,将0 分配给data1$dist.to.forest。由于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

应该做你想做的。

【讨论】:

  • 感谢这很好地解释了它,我现在理解我的思维和代码中的错误。非常感激。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
相关资源
最近更新 更多